【发布时间】:2014-07-20 12:00:54
【问题描述】:
在与我的朋友激烈讨论后,我们决定问问我们的直觉是否走在正确的道路上。问题在于 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,没关系。问题在于第二个和第三个孩子,它将如何运行此代码。我们的直觉是,我们不会遇到第二个和第三个“如果”。程序 pp1 将由所有 3 个子进程运行 3 次。
你怎么看?结果会怎样?
【问题讨论】:
-
测试自己会这么难吗?
-
别忘了
exec,朋友也可能失败。如果他们这样做了,那么子进程将直接进入下一个if。 -
你能重写它,使它不等待未初始化的变量吗?
标签: c linux unix fork createprocess