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;

C++ wait捕捉的信号处理WIFEXITED/WEXITSTATUS/WIFSIGNALED

时间: 2024-08-17 04:36:45

C++ wait捕捉的信号处理WIFEXITED/WEXITSTATUS/WIFSIGNALED的相关文章

WIFEXITED/WEXITSTATUS/WIFSIGNALED

WIFEXITED/WEXITSTATUS/WIFSIGNALED If the exit status value (*note Program Termination::) of the child process is zero, then the status value reported by `waitpid' or `wait' is also zero. You can test for other kinds of information encoded in the retu

WIFEXITED WEXITSTATUS WIFSIGNALED(转)

wait的函数原型是: #include #include pid_t wait(int *status) 进 程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就 会收集这个子进程的信息,并把它彻底销毁后返回:如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止. 参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针.但如果我们对这个子进程是如何死掉的毫

perl核心模块解析(一)POSIX

perl核心模块解析(一)    POSIX 详细文档链接如下 源自:http://blog.csdn.net/jonathanxqs 转自:http://perldoc.perl.org/POSIX.html POSIX/?p?z?ks/, 是可移植操作系统接口(Portable Operating System Interface ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE

信号的捕捉

1.如何实现信号的捕捉 2.sigaction函数 include<signal.h> int sigaction(int signo, const struct sigaction *act, struct sigaction *oact) sigaction函数可以读取和修改与指定信号相关联的处理动作.调用成功返回0,出错返回-1. signo是指定信号的编号:若act指针非空,则通过act修改该信号的处理动作:若oact指针非空,则通过oact传出该信号原来的处理动作. 3.pause函

【转】linux : waitpid函数

原文网址:http://blog.csdn.net/jifengszf/article/details/3067841 [waitpid系统调用]       功能描述: 等待进程改变其状态.所有下面哪些调用都被用于等待子进程状态的改 变,获取状态已改变的子进程信息.状态改变可被认为是:1.子进程已终止.2.信号导致子进程停止执行.3.信号恢复子进程的执行.在子进程终止的情况 下,wait调用将允许系统释放与子进程关联的资源.如果不执行wait,终止了的子进程会停留在"zombie"状

一、进程与信号之进程相关系统调用

进程调用函数wait(),waitpid() #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) //等待所有子进程,返回任一终止子进程的状态,阻塞方式 pid_t waitpid(pid_t pid,int *status,int options) //指定子进程pid等待终止返回,option设置是否阻塞 status参数 为空时,代表任意状态结束的子进程,若不为空,则代表指定状态结束的子进程

任督二脉之进程管理(1)

进程生命周期,进程生命周期创建.退出.停止,以及僵尸进程是什么意思. 一.进程的定义 进程--线程.进程是资源分配单位:搞清楚进程就是搞清楚进程资源情况.进程控制块PCB是OS的通用叫法.task_struct结构体描述进程的资源情况.如下图所属: 1)*mm描述内存资源 2)*fs:文件系统资源 3)文件资源:注意与fs的区别,打开文件的fd数组fd_array记录打开文件的fd 4)*signal:该进程的信号处理函数(用户理解为多态) 5)pid:数量有限 节选自<linux操作系统原理与

6进程原语:wait()和waitpid()函数

 1 wait/waitpid 僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号 进程init进程,称为init进程领养孤儿进程 2依赖的头文件 #include <sys/types.h> #include <sys/wait.h> 3函数声明 pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status

(49)LINUX应用编程和网络编程之四 Linux进程全解

补充: 1.  C程序的执行过程: C编译器调用链接器,链接器设置可执行程序文件的启动起始地址(启动例程),启动例程获得内核传递来的 命令行参数和环境变量值,为调用main函数做准备.[实际上该启动例程常用汇编语言编写],如果将启动例程换做C语言就是:exit(main(argc,argv)); main(int argc,char *argv[],char *engv[]);argv为指向参数的各个指针所构成的数组. 2.exit做一些清理处理(标准IO库的清理关闭操作为所有打开的流调用fcl