繁体   English   中英

对切​​换程序输出的 fork 不完全理解

[英]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 迭代:

  • 子进程(pid==0)将完成其进程(杀死子进程)并始终从开关中断(不影响 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM