与我的朋友强烈讨论之后,我们决定问我们的直觉是否正确。问题出在fork()函数或者子进程上。这是代码:
int main()
{
int status;
if(!fork()) execl("pp1",NULL);
if(!fork()) execl("pp2",NULL);
if(!fork()) execl("pp3",NULL);
wait(&status);
return status;
}
作者解释说,该程序将只创建3个子进程,但是当涉及到第一个子进程时,它将输入第一个“ if”并执行pp1作为新进程,但具有与子进程相同的pid,就可以了。 。问题在于第二个和第三个孩子,它将如何运行此代码。我们的直觉是,我们不会到达第二和第三“ if”。程序pp1将由3个子进程全部运行3次。
你有什么感想?结果如何?
请注意的返回值fork()
。来自man 2 fork
:
成功后,将在父级中返回子进程的PID,在子级中返回0。如果失败,则在父级中返回-1,不创建任何子级进程,并适当地设置errno。
意味着子进程0
在成功派生后收到。至于!0
计算结果为true
孩子执行execl
的话,而爸爸向前几步到下一个fork()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句