gpt4 book ai didi

c - C 中的 fork 失败

转载 作者:行者123 更新时间:2023-11-30 20:10:33 26 4
gpt4 key购买 nike

我在用于为学校项目创建终端的函数中运行 fork 时遇到问题。

当用户输入命令时,调用此函数来处理用户输入:

void handleExternalCommands(char ** arr)
{
pid_t pid;

pid = fork();

printf("pid is ", (long) pid);

if (pid == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0)
{
int status = execvp(arr[0], arr);

printf("im in the child process");

if (status == -1)
{
// error handle
}

}

wait();
}

但是,无论我输入什么,我实际上都无法将其放入 if 语句中。如果我尝试使用以下方法找出 pid 发生了什么:

printf(pid);

我收到段错误错误?

感谢大家提前提供的帮助。

更新:

我已将代码更改为上面的内容。打印 pid 只发生一次,并且什么也不打印:“pid is”

最佳答案

如果 execvp() 有效,则 printf() 永远不会执行。如果 (a) 在末尾添加换行符并且 (b) execvp() 失败,您只会看到来自 printf() 的消息。 (好的:即使没有换行符,您最终也可能会看到它,但换行符是个好主意。)

printf() 移至 execvp() 之前,并(肯定)添加换行符,您应该会看到信息。另请参阅printf() anomaly after fork() ,但请注意,如果不使用换行符终止 printf() 输出,您会遇到不同的结果。

关于printf(pid)崩溃,需要阅读printf()上的手册并添加编译器选项,以便您了解错误的使用。

您可能需要:

printf("PID %d\n", pid);

假设pid_tint足够兼容,不会遇到麻烦——这是一个相当安全的假设,但可以通过编写来避免:

printf("PID %d\n", (int)pid);

(或使用int pid;作为定义)。但关键是你需要正确使用printf(),并且execvp()除非失败否则不会返回。

关于c - C 中的 fork 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com