[英]Not fully understanding fork for switch program output
我一直试图理解这个程序的输出,但我还是不太明白。
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 %d\n", getpid(), getppid());
while (wait(NULL) > 0) {}
return 0;
}
当我运行它时,它返回:
我是进程11110,我父亲是进程26453
但是,如果您在没有两个“% 2”的情况下运行上述代码,它将不会返回任何内容。
我对此感到非常困惑。 我认为它的工作方式(对于没有“% 2”的代码)是,对于每个 for 迭代:
上述方法是否正确? 如果是这样,“%2”会怎么样?
没有% 2
你会得到:
switch (fork())
{
case 0:
if (pid == 0)
{
exit(0);
break;
}
default:
if (pid != 0)
{
exit(0);
}
}
由于pid
不是 0,因此父级将在第一个fork()
之后立即exit(0)
,因此您不会看到 print 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.