有人可以向我解释等待的内容以及exit(0),exit(1),exit(2)等之间的区别是什么。
这是我很困惑的代码。
int main()
{
if (fork()== 0)
printf("HC: hello from child\n");
else
{
printf("HP: hello from parent\n");
wait(NULL);
printf("CT: child has terminated\n");
}
printf("Bye\n");
return 0;
}
输出
HC: hello from child
Bye
HP: hello from parent
CT: child has terminated
(or)
HP: hello from parent
HC: hello from child
CT: child has terminated // this sentence does
// not print before HC
// because of wait.
Bye
这是来自geeksforgeeks的代码,因此转到if语句,如果if语句为true,则执行printf("HC: hello from child\n");
,但是为什么又返回else语句并打印出printf("HP: hello from parent\n"); printf("CT: child has terminated\n");
?
您正在从单进程的角度看这件事。 fork()
创建另一个进程,该进程与父进程完全相同,但具有only区别:克隆上的fork()
函数调用的结果为0
,但在父级上,它是PID通过操作。
因此if (fork == 0)
仅适用于孩子。
换句话说,both分支同时跟随。
wait()
部分是父级如何等待子级进程终止的方式。 NULL
作为参数的意思大致是“不在乎哪个孩子,只是在乎哪个孩子”。通常,您将waitpid()
与从pid
调用中获得的fork()
值一起使用,但这仅在可能涉及多个子进程的情况下才非常重要。
如果您不“收获”您的孩子,您将以zombies
结束,因此wait
部分很重要。