上代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
pid_t p1 = fork();
pid_t p2 = fork();
if ( p2 == 0 )
printf("p1 = %d, p2 = %d\n", p1, p2);
else
printf("p1 = %d, p2 = %d\n", p1, p2);
//printf("p1 = %d, p2 = %d\n", p1, p2);
return 0;
}
分析:
fork()的返回值包含两种结果:1、> 0,表示在父进程空间;2、== 0,表示在fork成功之后的子进程空间;
那么上述代码存在4种结果:
假设:p1 == 1001,p2 == 1002
1、p1 = 1001, p2 = 1002
2、p1 = 1001, p2 = 0
3、p1 = 0, p2 = xxx(该进程号未知)
4、p1 = 0, p2 = 0
其中,
p1 = 1001,p2 = 1002,表示在main进程中看到的p1进程号和p2进程号;
p1 = 1001,p2 = 0,表示在main进程空间fork除了p1之后继续留在main进程空间,然后fork出p2之后进入了p2的进程空间中;
p1 = 0, p2 = xxx(该进程号未知)表示在p1进程的进程空间,并fork了p2进程并继续留在p1的进程空间中;
p1 = 0, p2 = 0表示在p1进程空间fork出来了p2进程,并进入了p2进程空间。