//原题是求下列程序会打印多少个-号:
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
int fpid;
for(int i=0;i<2;i++){
printf("- %d\n",i);
printf("%d %d %d\n",getppid(),getpid(),fpid);
fpid=fork();
printf("- %d\n",i);
printf("%d %d %d\n",getppid(),getpid(),fpid);
}
return 0;
}
执行结果:
admindeiMac-2:~ yidan.huang$ ./fork
- 0
532 878 244920374
- 0
532 878 879
- 1
532 878 879
- 1
532 878 880 //由于不同的操作系统的调度策略,此时先父进程执行完,父进程创建了两个子进程879、880
- 0
878 879 0 //仅继承并执行fork()后的代码,继续打印i=0
- 1
878 879 0
- 1
1 879 881 //这是父进程创建的第一个子进程879执行完,子进程中只fork()一次(在i=1时),创建了子子进程881
- 1
1 880 0 // 由于父进程执行完退出了,子进程880变成孤儿进程由pid=1的init领养
- 1
1 881 0 //由子进程879执行完退出了,子子进程881变孤儿进程由pid=1领养
总共输出9个-号