C语言 不完全理解开关程序输出的fork



我一直在努力理解这个程序的输出,但我仍然不太明白。

main()
{
int pid, i;
pid = getpid();
for (i = 0; i < 25; i++)
{
switch (fork())
{
case 0:
if (pid % 2 == 0)
{
exit(0);
break;
}
default:
if (pid % 2 != 0)
{
exit(0);
}
}
}
printf("I am the process %d and my father is the process %dn", getpid(), getppid());
while (wait(NULL) > 0) {}
return 0;
}

当我运行这个时,它返回:

我是进程11110,我父亲是进程26453

但是,如果运行上面的代码时没有&;% 2&;,它将不会返回任何东西。

我对此很困惑。我认为它的工作方式(对于没有"% 2"的代码)是,对于每个for迭代:

  • 子进程(pid==0)将完成其进程(杀死子进程)并始终从开关断开(不影响for循环)
  • 父进程/主进程将等待,直到子进程死亡
  • 下一个迭代

以上方法正确吗?如果是这样,那么"% 2"又如何呢?

如果没有% 2,你会得到:

switch (fork())
{
case 0:
if (pid == 0)
{
exit(0);
break;
}
default:
if (pid != 0)
{
exit(0);
}
}

由于pid不为0,父节点将exit(0)紧接在第一个fork()之后,因此您不会看到打印语句。

相关内容

  • 没有找到相关文章

最新更新