繁体   English   中英

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

[英]Running fork inside a loop produces unexpected results (measuring process switch time)

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

我的问题在这个循环中:

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]);
    }
}

为了测试看叉子多长时间击中父母和孩子,我输入了一个printf语句,我在屏幕上打印了大约15条语句。 考虑到循环应该只运行两次,这怎么可能?

这是因为每个子进程都将创建其他进程。

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

编辑:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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