如何解决两个子进程竞争
pid1=fork();
12 pid2=fork();
13 if(pid1<0)
14 {
15 perror("fork:");
16 exit(1);
17 }
18 else if(pid1==0)
19 {
20 printf("Here is child1 process\n");//此处不会执行
21 execlp("ls","ls","-l",NULL);//此处执行两遍
22 exit(0);
23 }
24 if(pid2<0)
25 {
26 perror("fork");
27 exit(1);
28 }
29 else if(pid2==0)
30 {
31 //waitpid(pid1,NULL,0);
32 printf("Here is child2 process\n");
sleep(5);
34 exit(0);
35 }
36 else
37 {
38 do
39 {
40 if((newpid=waitpid(pid2,NULL,WNOHANG))==0)
41 {
42 printf("The child2 have not exited\n");
43 }
44 sleep(1);
45 }
这里该怎么解决呢?
------解决方案--------------------
连续用2个fork的结果就是共产生了4个进程!
一开始的子进程和父
子进程的子和父 //2
父进程的子和父 //2
也就是原来的父进程有两个子进程:pid1,和pid2
pid1进程有一个子进程:pid2 (此pid2和上面的pid2是不同的!) ,,第一个if(pid1==0)时,这两个进程都会执行。
LZ慢慢想会。。