zoukankan      html  css  js  c++  java
  • C++ wait捕捉的信号处理WIFEXITED/WEXITSTATUS/WIFSIGNALED

    当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个异步事件,所以这种信号也是内核给那个父进程发的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数。对于这种信号的系统默认动作是忽略它。

    调用wait或waitpid的进程可能会发生什么情况:

    •  如果其所有子进程都在运行,则阻塞。
    • 如果一个子进程已经终止,正在等待的父进程获取到终止状态,则取得该子进程的终止状态立即返回。
    • 如果他没有任何子进程,则立即出错返回。

    WIFEXITED(status)如果子进程正常结束则为非0值。
      WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。
    WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真。
      WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。
    WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。
      WSTOPSIG(status)取得引发子进程暂停的信号代码。

    1     if (WIFEXITED(status))
    2         cout << "normal termination, exitstatus = " << WEXITSTATUS(status) << endl;
    3     else if (WIFSIGNALED(status))
    4         cout << "abnormal termination, signalstatus = " << WTERMSIG(status) << endl;
    5     else if (WIFSTOPPED(status))
    6         cout << "child stopped ,signal number = " << WSTOPSIG(status) << endl;
    7     else 
    8         cout << "unknown status :" << status << endl;
  • 相关阅读:
    今天碰到的angular 中的一个小坑
    mvc 防止客服端多次提交
    自定义通用Distinct去除重复数据的2中方式
    Sql 字符串操作类COALESCE
    SQL Server 性能优化
    Visual Studio Tip: Get Public Key Token for a Strong Named Assembly
    C#发送邮件
    Web打印组件jatoolsPrinter(转载)
    SQL SERVER 2005 同步复制技术(转)
    [Asp.net]常见word,excel,ppt,pdf在线预览方案(转)
  • 原文地址:https://www.cnblogs.com/delmory/p/3918811.html
Copyright © 2011-2022 走看看