赞
踩
在使用fork()函数进行创建子线程的时候,如果没有在创建成功子进程时选择break跳出for循环,那么子进程也会进入for循环,开始调用fork()函数创建“孙子”进程,所以在创建子进程成功的时候就直接选择break跳出循环,使得if(pid == 0)为子进程的唯一出口,而父进程的唯一出口就是当for循环执行完毕后。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main(){ 5 pid_t pid; 6 int i; 7 for(i = 1; i < 5; i++){ 8 pid = fork(); 9 if(pid == -1){ 10 perror("fork创建进程失败!\n"); 11 }else if(pid == 0){ 12 //此处创建的是子进程,当遇到子进程的时候就跳出循环,免得再次循环执行fork()函数 13 break;//此处为子进程的唯一出口 14 } 15 } 16 17 //父进程的唯一出口为当循环执行结束后 18 if( i < 5){ 19 sleep(i); 20 printf("我是第%d个子进程,我的父进程id为%u\n",i+1,getppid()); 21 }else{ 22 sleep(i); 23 printf("我是父进程,我的pid为%d\n",getpid()); 24 } 25 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。