waitpid WNOHANG

waitpid WNOHANG

原文链接:https://blog.csdn.net/weixin_37787043/article/details/78714621

 

#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
//waitpid WNOHANG
int 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.out
main process pid = 24977
父进程pid = 24977
-----子进程运行中-----
子进程pid = 24978
-----子进程运行中-----
-----子进程运行中-----
********
-----子进程运行中-----
normal exit status = 1
-------------
*/
————————————————

posted @ 2021-06-17 09:56  我家有只江小白  阅读(249)  评论(0编辑  收藏  举报