#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
", getpid());
sync();
exit(0);
}
else
{
sleep(10);
printf("第二个进程收到%d
", wait(NULL));
exit(0);
}
}
default:
printf("第一个进程pid为:%d
", getpid()); //返回当前进程的标识符
printf("第二个进程pid为:%d
", pid);
printf("第一个进程收到%d
", wait(NULL));
printf("第一个进程收到%d
", 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