#include <stdio.h>
#include <unistd.h>
int main(){
if(fork()>0){
printf("i am pn");
fork();
}
else{
printf("i am cn");
}
}
输出是
i am p
i am c
否则输出为
i am p
i am c
i am c
i am c
我不能理解第二个叉在有else和没有else的时候做什么。
父进程派生一个新进程,由于子进程中的fork返回值为0,因此跳过if并打印i am c
。父进程将打印i am p
,并将再次分叉!第二个子项和父项现在将打印i am c
三次。如果您保留else
,则在if
中运行的父级和第二个子级显然不会执行else
块。