1 #include<stdio.h>
2 #include<unistd.h>
3 #include<wait.h>
4 void main(void)
5 {
6 //连续创建3个子进程
7 int n=3,i;
8 pid_t pid,wpid1,wpid2,wpid3,j;
9 for(i=0;i<n;i++){//父进程出口
10 sleep(1);
11 pid=fork();
12 if(pid == 0 ){
13 break;//子进程出口
14 }
15 if(i==0){//取出第二个子进程的pid
16 wpid1=pid;
17 }
18 else if(i==1){
19 wpid2=pid;
20 }else
21 wpid3=pid;
22 }
23 if(pid>0){
24 sleep(20);
25 do{
26 j=waitpid(0,NULL,WNOHANG);
27 }while(j!=-1);
28
29 while(1){
30 printf("i am parent pid=%d gpid=%d\n",getpid(),getgid());
31 }
32 }
33 else if(pid == 0){
34 switch(i){
35 case(0):
36 printf("i am th%d child,PID=%d,GPID=%d\n",i,getpid(),getgid());
37 execl("/usr/bin/ps","ps",NULL);
38 break;
39 case(1):
40 printf("i am th%d child,PID=%d,GPID=%d\n",i,getpid(),getgid());
41 execlp("./printf_a","printf_a",NULL);
42 break;
43 case(2):
44 printf("i am th%d child,PID=%d,GPID=%d\n",i,getpid(),getgid());
45 execlp("./error","error",NULL);
46 break;
47 }
48 }
49
50 }
51
linux系统进程 fork()、waitpid()与exec()函数族使用
最新推荐文章于 2023-06-21 15:22:27 发布