进程fork()函数可能返回三个值:
0: 该进程为子进程(因为它没有子进程,故为0)
进程标识: 该进程为父进程
负数: 创建进程失败
在做上机作业的时候,没有思考到位,导致出现了逻辑错误:
最终输出两组sub_1 一组sub_2 一组parent
期望输出为两组sub_2 一组sub_1 一组parent
后来经过实验,打印出pid1和pid2的值,发现了如下特点:
pid2是在第一个fork后定义的,所以在此产生的进程与父进程共享一个pid1的值。
图中pid为4160的进程虽然没有参与第一次进程的创建,但它从父进程中得到了这一值。
正确的逻辑:
int pid1=fork();
int pid2=fork();
int i=0;
while(i++<1)
{
if(pid2==0){
printf("this is from sub_2!pid=%d pid1=%d pid2=0\n",getpid(),pid1);
}else if(pid1==0){
printf("this is from sub_1!pid=%d pid1=0 pid2=%d\n",getpid(),pid2);
}else{
printf("this is from parent!pid=%d\n pid1=%d pid2=%d\n",getpid(),pid1,pid2);}
}
以最后创建的进程为先决条件判断。