waitpid WNOHANG

来源:互联网 发布:sql查询不重复的记录 编辑:程序博客网 时间:2024/06/06 01:09
#include<stdio.h>#include<stdlib.h>#include <unistd.h>//waitpid  WNOHANGint main(void){    printf("main process pid = %d\n",getpid());    int status;    pid_t pid;    pid = fork();//创建子进程    if(pid < 0)    {        perror("fork error");        exit(1);//结束进程    }    if(pid == 0)    {        printf("子进程pid = %d\n",getpid());        sleep(3);        printf("********\n");        exit(2);    }    if(pid > 0)    {        printf("父进程pid = %d\n",getpid());        //waitpid(pid,&status,0);//等同wait(&status);        //WNOHANG,waitpid()不阻塞而且立即返回,返回值为0        while(waitpid(pid,&status,WNOHANG) == 0)        {            printf("-----子进程运行中-----\n");            sleep(1);        }        //判断子进程结束状态        if(WIFEXITED(status))//进程正常结束        {            printf("normal exit status = %d\n",WIFEXITED(status));        }        if(WIFSIGNALED(status))//进程异常终止        {            printf("recv signal exit\n");        }        printf("-------------\n");        exit(1);    }    return 0;}/*$ ./a.outmain process pid = 24977父进程pid = 24977-----子进程运行中-----子进程pid = 24978-----子进程运行中----------子进程运行中-----********-----子进程运行中-----normal exit status = 1-------------*/