我正在学习fork,我希望有人能为所提供的代码提供父子关系图。我已经在C中运行了它,并得到了输出。根据我的理解,只需要一些确认。
#include <stdio.h>
main()
{
int i, pid, notdone = 1;
for (i = 0 ; i < 2 && notdone ; i++)
{
printf("Tic!\n");
if ((pid=fork())==0)
{
printf("Tac!\n");
notdone=0;
}
else
{
printf("Toe!\n");
}
}
}
输出:Tic Toe Tic Tac Toe Tac
我相信fork会被调用两次,因此有4个进程在运行。 1)“Tic”然后fork,Parent先行,“Toe”,再次运行循环,“Tic”然后再次fork,但首先等待Child1;然后“Tac”回到Parent,因为条件测试失败,Parent再次,“Toe”,再次运行循环但是条件失败因此退出; Child2去,“Tac”,因条件测试失败而退出。我做对了吗?
答案 0 :(得分:0)
有3个进程:父进程和两个子进程。
父母执行以下序列:“Tic”,fork
,“Toe”,“Tic”,fork
,“Toe”,退出。
每个孩子都按照以下顺序执行:“Tac”,退出。
输出如何发生交错是未定义的,这意味着没有规则说明必须如何发生,所以你的“等待”和“回去”是不正确的。在实践中,您可能会发现卸载的计算机上的输出顺序变化不大,因为它们的时间是正确的,但您应该从不依赖它。