如果有条件的话,使用fork

时间:2017-11-29 19:55:59

标签: c unix fork

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

void fork4 () 
{
    printf("\n [%d] L0 \n", getpid());
    if ( fork() != 0 )
    {
        printf("\n [%d] L1  \n" , getpid());
        if ( fork() != 0)
        {
            printf("\n [%d] L2 \n" , getpid());
            fork();
        }
    }
    printf("\n [%d] Bye \n" , getpid());
}

int main()
{
    fork4();
    return 0;
}

输出:

 [4141] L0 

 [4141] L1  

 [4142] Bye 

 [4141] L2 

 [4141] Bye 

 [4143] Bye 

 [4144] Bye

我试图了解到底发生了什么,但输出很奇怪!我不明白为什么父进程可以进入第一个if范围!如果有人解释这里发生的事情,那会没事吗?

1 个答案:

答案 0 :(得分:0)

注意输出。

您只能看到 ID:4141 的流程能够进入if语句。因为在成功创建子进程后,fork()的返回值是子进程ID。

流程 id:4141 是您的父流程。此过程调用fork()语句,这会创建子进程 4142,4143,4144 ...

这些流程( 4142,4143 )都不能进入您的if声明。因为对于这些进程,成功执行fork()语句后返回值为零。

对于流程 4142 4143 ,从fork()创建后的下一个执行声明是&#34; Bye&#34;言。