红联Linux门户
Linux帮助

linux的waitpid函数

发布时间:2016-12-25 10:04:32来源:linux网站作者:oguro
waitpid函数
作用同wait,但可指定pid进程清理,可以不阻塞。
pid_t waitpid(pid_t pid, int *status, in options); 成功:返回清理掉的子进程ID;失败:-1(无子进程)
 
特殊参数和返回情况:
参数pid: 
> 0 回收指定ID的子进程
-1 回收任意子进程(相当于wait)
0 回收和当前调用waitpid一个组的所有子进程
< -1 回收指定进程组内的任意子进程
返回0:参3为WNOHANG,且子进程正在运行。
 
注意:一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。
 
#include <unistd.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <sys/wait.h>  
int main(void)  
{  
pid_t pid, pid2, wpid;  
int flg = 0;  
pid = fork();  
pid2 = fork();  
if(pid == -1){  
perror("fork error");  
exit(1);  
} else if(pid == 0){        //son  
printf("I'm process child, pid = %d\n", getpid());  
sleep(5);                 
exit(4);  
} else {                    //parent  
do {  
wpid = waitpid(pid, NULL, WNOHANG);  
//wpid = wait(NULL);  
printf("---wpid = %d--------%d\n", wpid, flg++);  
if(wpid == 0){  
printf("NO child exited\n");  
sleep(1);         
}  
} while (wpid == 0);        //子进程不可回收  
if(wpid == pid){        //回收了指定子进程  
printf("I'm parent, I catched child process,"  
"pid = %d\n", wpid);  
} else {  
printf("other...\n");  
}  
}  
return 0;  
}
 
本文永久更新地址:http://www.linuxdiyf.com/linux/27233.html