#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范围!如果有人解释这里发生的事情,那会没事吗?
答案 0 :(得分:0)
注意输出。
您只能看到 ID:4141 的流程能够进入if
语句。因为在成功创建子进程后,fork()
的返回值是子进程ID。
流程 id:4141 是您的父流程。此过程调用fork()
语句,这会创建子进程 4142,4143,4144 ...
这些流程( 4142,4143 )都不能进入您的if
声明。因为对于这些进程,成功执行fork()
语句后返回值为零。
对于流程 4142 和 4143 ,从fork()
创建后的下一个执行声明是&#34; Bye&#34;言。