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我同意您的观点,但我认为问题仍然是一样的。请阅读