如何测试Linux 中的wait函数能不能等待子进程的子进程?

#include <stdio.h>
#include <stdlib.h>

int main()
{
  pid_t pid = fork();
  switch(pid)
    {
    case -1:
      perror("fork failed");
      exit(1);
    case 0:
      {
       pid = fork();
       if(pid == -1)
       {
       perror("fork failed");
       exit(1);
       }
       else if(pid == 0)
       {
       sleep(2);
       printf("第三个进程pid为:%d\n", getpid());
       sync();
       exit(0);
       }
      else
      {
      sleep(10);
      printf("第二个进程收到%d\n", wait(NULL));
      exit(0);
      }
     }
    default:
      printf("第一个进程pid为:%d\n", getpid()); //返回当前进程的标识符
      printf("第二个进程pid为:%d\n", pid);
      printf("第一个进程收到%d\n", wait(NULL));
      printf("第一个进程收到%d\n", wait(NULL));
      sync();
      break;
   }
  return 0;
}

[root@linux Desktop]# gcc b.c
[root@linux Desktop]# ./a.out
第一个进程pid为:3038
第二个进程pid为:3039 //等待大概两秒后输出第三行
第三个进程pid为:3040 //等待大概10秒后输出下面的
第二个进程收到3040
第一个进程收到3039
第一个进程收到-1      //注意看这儿
[root@linux Desktop]# 

Linux API 中的wait函数能不能等待子进程的子进程(孙子进程)?

还是wait()只能等待直接子进程?
答案:wait函数不能等待子进程的子进程
http://zhidao.baidu.com/link?url=jsjeZhdSBkjUpcISh2TS4IOM2EcGn5q9q-hlF9Ep3s3hBz-rwc8SLOO0z0GiRbVroCq5cnmGGvDoHc06zhRTSa

 

posted @ 2014-11-14 14:12  南哥的天下  阅读(494)  评论(0编辑  收藏  举报