进程学习6--waitpid与wait差别

来源:互联网 发布:星星网络星盘查询 编辑:程序博客网 时间:2024/05/21 17:26

概述

(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学习教程

原创粉丝点击