首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

怎么解决两个子进程竞争

2012-09-14 
如何解决两个子进程竞争pid1fork()12pid2fork()13if(pid10)14{15perror(fork:)16exit(1)17}18els

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


热点排行