zoukankan      html  css  js  c++  java
  • linux 中的 wait 函数和 waitpid 函数

    wait 函数

    函数原型

    #include <sys/types.h>

    #include <wait.h>

    int wait(int *status)

    返回值

    成功:清理掉的子进程ID;失败:-1 (没有子进程)

    函数功能

    父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

    ① 阻塞等待子进程退出

    ② 回收子进程残留资源

    ③ 获取子进程结束状态(退出原因)。

    可使用wait函数传出参数status来保存进程的退出状态。借助宏函数来进一步判断进程终止的具体原因。宏函数可分为如下三组:

     1.  WIFEXITED(status) 为非0    → 进程正常结束

             WEXITSTATUS(status) 如上宏为真,使用此宏 → 获取进程退出状态 (exit的参数)

     2. WIFSIGNALED(status) 为非0 → 进程异常终止

             WTERMSIG(status) 如上宏为真,使用此宏 → 取得使进程终止的那个信号的编号。

    *3. WIFSTOPPED(status) 为非0 → 进程处于暂停状态

             WSTOPSIG(status) 如上宏为真,使用此宏 → 取得使进程暂停的那个信号的编号。

             WIFCONTINUED(status) 为真 → 进程暂停后已经继续运行

    注意:一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。   

    waitpid函数

    函数原型

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

    参数pid:

      > 0 回收指定ID的子进程  

      -1 回收任意子进程(相当于wait

      0 回收和当前调用waitpid一个组的所有子进程

           < -1 回收指定进程组内的任意子进程

    参数 status:子进程的退出状态,用法同wait函数

    参数options:

      设为WNOHANG:非阻塞

      设为0:阻塞

    返回值

    >0:清理掉的子进程

    -1:无子进程

    =0:参数3为WNOHANG,子进程正在运行

    功能

    作用同wait,但可指定pid进程清理,可以不阻塞。

  • 相关阅读:
    [转]Kqueue与epoll机制
    [转]Docker中的镜像
    [转]linux awk命令详解
    [转]Linux Shell 1>/dev/null 2>&1 含义
    file_get_contents(): SSL operation failed with code 1...解决办法和stream_context_create作用
    PHP abstract与interface之间的区别
    PHP基于Redis的全局订单号id
    Eclipse for php+Xdebug,搭建php单步调试环境
    Eclipse launch configuration----Eclipse运行外部工具
    MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转
  • 原文地址:https://www.cnblogs.com/xumaomao/p/13061264.html
Copyright © 2011-2022 走看看