日期:2014-05-16  浏览次数:20719 次

如何解决两个子进程竞争
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慢慢想会。。