C 在循环中运行fork会产生意外的结果(测量过程切换时间)

C 在循环中运行fork会产生意外的结果(测量过程切换时间),c,operating-system,C,Operating System,我正在编写一个程序来测量执行进程切换所需的时间。为了做到这一点,我让父母写一个字节的消息给孩子,孩子读它 我的问题是在这个循环中: for(i=0; i<2; i++) { if(fork()==0) //child process, read { close(pipefd[1]); read(pipefd[0]); close(pipefd[0]); } else //parent process

我正在编写一个程序来测量执行进程切换所需的时间。为了做到这一点,我让父母写一个字节的消息给孩子,孩子读它

我的问题是在这个循环中:

for(i=0; i<2; i++)
{
    if(fork()==0) //child process, read
    {
        close(pipefd[1]);
        read(pipefd[0]);
        close(pipefd[0]);
    }

    else //parent process
    {
        close(pipefd[0]);
        write(pipefd[1]);
        close(pipefd[0]);
    }
}

for(i=0;i这是因为每个子进程将创建其他进程

执行
if
块后,每个子进程将在循环开始时返回,并再次返回
fork()
,直到所有子进程中的
i==2

编辑: 为了避免这种情况,我建议使用以下方法:

if(fork() == 0)
{
    //Do stuff
    break;
}

也许这不是最优雅的方式,但它应该会起作用。

谢谢。关于我如何只在父母和孩子之间进行通信,有什么想法吗?想法是我将实现一个时钟和时间,即发送/接收单字节消息所需的时间(因为这将强制进行进程切换,)但我不知道该怎么做,因为我似乎只应该调用fork()一次。仍然没有解释15个输出…您只会得到4个进程,它们应该提供4个输出。@user120920请查看我的编辑并告诉我它是否有效。@thang我同意您的观点,但我认为问题仍然是一样的。请阅读