分叉示例帮助
Fork example assistance
我正在学习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",因为条件测试失败而退出。我没听错吗?
有3个进程:parent和两个children.
parent 执行以下顺序:"Tic"、fork
、"Toe"、"Tic"、fork
、"Toe" , 退出.
每个 child 执行此序列:"Tac",退出。
输出如何发生交错是未定义的,这意味着没有规则说明它必须如何发生,所以你的"waits"和"goes back" 不正确。在实践中,您可能会发现在未加载的计算机上输出顺序变化不大,因为时间就是它们的时间,但您应该永远不要依赖它。
我正在学习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",因为条件测试失败而退出。我没听错吗?
有3个进程:parent和两个children.
parent 执行以下顺序:"Tic"、fork
、"Toe"、"Tic"、fork
、"Toe" , 退出.
每个 child 执行此序列:"Tac",退出。
输出如何发生交错是未定义的,这意味着没有规则说明它必须如何发生,所以你的"waits"和"goes back" 不正确。在实践中,您可能会发现在未加载的计算机上输出顺序变化不大,因为时间就是它们的时间,但您应该永远不要依赖它。