使用fork创建多个进程

时间:2014-05-30 16:39:03

标签: c linux unix fork createprocess

在与我的朋友强烈讨论后,我们决定询问我们的直觉是否在正确的道路上。问题在于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次。

你怎么看?结果会是什么?

2 个答案:

答案 0 :(得分:2)

请注意fork()的返回值。来自man 2 fork

  

成功时,子进程的PID在父进程中返回,并在子进程中返回0。失败时,在父项中返回-1,不创建子进程,并且设置了errno-          ately。

表示子进程在成功fork之后收到0。当!0评估为true时,孩子会执行execl,然后父亲会前进到下一个fork()

答案 1 :(得分:0)

此代码将执行pp1,然后执行pp2,最后执行pp3。好的。但是,验证execl的返回值也可能是一个好主意。如果失败,它将不会退出(是的,执行功能退出运行过程)。

但我不知道你想做什么。但是要从C程序启动二进制文件(即使你只是想得到这个程序的返回值),它可以(我说“可以”;))更好地使用'system()'函数。它返回参数中传递的程序的值,并且在执行后不会退出程序,与exec函数不同。

我只是提供另一种解决方案。我不批评那个;)