阻塞和非阻塞等待

来源:互联网 发布:java定义数组并赋值 编辑:程序博客网 时间:2024/06/06 01:53

阻塞式等待

#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/wait.h>int main(){    pid_t pid;    pid=fork();    if(pid<0)    {        printf("fork error\n");        return 1;    }    else if(pid==0)    {        printf("child id running,pid is:%d\n",getpid());        sleep (5);        exit(2);    }    else    {        int status=0;        pid_t ret=waitpid(-1,&status,0);        printf("test wait\n");        if(WIFEXITED(status)&& ret==pid)        {            printf("wait 5s,child return code is: %d\n",WEXITSTATUS(status));        }        else
{        printf("wait child failed\n");        return 1;    }}return 0;

}

这里写图片描述

非阻塞式等待:

#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/wait.h>int main(){    pid_t pid;    pid=fork();    if(pid<0)    {        printf("fork error\n");        return 1;    }    else if(pid==0)    {        printf("child id running,pid is:%d\n",getpid());        sleep (5);        exit(2);    }    else    {        int status=0;        pid_t ret=0;        do        {            ret=waitpid(-1,&status,WNOHANG);            if(ret==0)            {                printf("child is running\n");            }            sleep(1);        }while(ret==0);        if(WIFEXITED(status)&& ret==pid)        {               printf("wait 5s,child return code is: %d\n",WEXITSTATUS(status));        }        else        {               printf("wait child failed\n");            return 1;        }    }    return 0;}

这里写图片描述

0 0
原创粉丝点击