概述
(1)基本功能一样,都是用来回收子进程
(2)waitpid可以回收指定PID的子进程
(3)waitpid可以阻塞式或非阻塞式两种工作模式,wait只能是阻塞式工作模式
正文
函数
函数原型waitpid
pid_t waitpid(pid_t pid, int *status, int options);
参数
参数pid表示要回收的PID号(-1表示不指定pid号)
参数status为子进程返回值
参数options表示可选项(0:默认阻塞式)
WNOHANG 非阻塞模式
返回值
回收的pid号,
-1表示pid号是错的
0表示在非阻塞式下没有回收
测试代码
int main(void)
{
pid_t Mypid =-1;
Mypid = fork();
if(Mypid>0)/*父进程*/
{
pid_t Mypid2 = -1;
int status = -1;
Mypid2 = waitpid(Mypid,&status,0);/*0为默认阻塞*/
printf("son is recycled Mypid2 = %d\r\n",Mypid2);
printf("exit true? %d\n", WIFEXITED(status));
printf("exit false? %d\n", WIFSIGNALED(status));
printf("exit val %d.\n", WEXITSTATUS(status));
}
else if(Mypid == 0)/*子进程*/
{
printf("son progress.Mypid = %d\r\n",getpid());
return 22;
}
return 0;
}
/************运行结果****************
son progress.Mypid = 10652
son is recycled Mypid2 = 10652
exit true? 1
exit false? 0
exit val 22.
************************************/
参考
朱友鹏Linux学习教程