zoukankan      html  css  js  c++  java
  • wait操作接口

    1.等待回收的两个函数wait()waitpid()函数

      1.1 wait(int *status)的用法:阻塞函数,等待任意一个子进程的返回。

        *wait(NULL):对子进程的结束状态不关心;

        *wait(status)  可以通过statu查看子进程的结束状态。

      int statu;

      wait(&statu);

      if(WIFEXITED(statu)){      //正常退出
           printf("正常结束code:%d ",WEXITSTATUS(statu));//code状态码用于表示成功与否
        }else if(WIFSIGNALED(statu)){//接收信号退出
           printf("异常结束signo:%d ",WTERMSIG(statu));
        }

       

    2.waitpid()的用法

      pid_t waitpid(pid_t pid, int *status,int options);

    参数:.pid == -1 等待任一子进程。
         .pid > 0 等待进程号为pid的进程返回
         .pid == 0 等待任何一个组id和父进程组id相同的进程的返回
         .pid < -1 等待任何一个进程的组id号和参数pid绝对值相同的进程

     options:(可以多个条件一起用 |)

       WNOHANG     return immediately if no child has exited.

            WUNTRACED   also return if a child has  stopped  (but  not  traced  via
                       ptrace(2)).   Status for traced children which have stopped
                       is provided even if this option is not specified.

           WCONTINUED  also return if a stopped child has been resumed by deliveryof SIGCONT.

    对status状态的操作:
       .WIFEXITED(status)若子进程为正常终止,则为真。
       对于这种情况可执行WEXITSTATUS(status)求得终止码。

       .WIFSIGNALED(status) 若为异常终止子进程,则为真(接到一个不捕捉的信号)。
       对于这种情况,可执行WTERMSIG(status)取使子进程终止的信号编号。
       另外某些实现定义宏:WCOREDUMP(status)若已产生终止进程的core文件,则它返回真
     
       .WIFSTOPPED(status) 若为当前暂停子进程的返回的状态,则为真。
       对于这种情况,可执行WSTOPSIG(status)取使子进程暂停的信号编号

  • 相关阅读:
    deepin/uos和局域网其他机器无法ping通
    Ubuntu18.04完全卸载vscode
    批量拉取github组织或者用户的仓库
    vmware uos挂载windows共享目录
    清空容器另类方式
    time_t 时间格式化字符串
    条件变量condition_variable
    C++多维堆数组定义
    arm64 ubuntu18.04 bionic安装bcc tools
    win10下载编译chromium
  • 原文地址:https://www.cnblogs.com/edan/p/8881936.html
Copyright © 2011-2022 走看看