【发布时间】:2015-04-21 15:10:41
【问题描述】:
我想捕捉发送到我的程序的信号并执行简单的操作(例如,使用指定的代码退出)。但是如果进程在我的信号处理程序设置之前接收到一个信号,它就会异常退出,就像不存在处理程序一样。
我的简单程序的源代码:
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
void handler(int sig) { exit(0); }
int main()
{
signal(SIGTERM, handler);
while(1) { sleep(1); }
return 0;
}
使用g++ my.c 命令编译。
连续运行程序的脚本:
while true; do ./a.out; echo $?; done
如果我手动发送信号进行处理,那么大部分时间一切正常 - 以零代码退出。但如果我使用下面的脚本:
频繁发送信号到进程的脚本:
while true; do slay -sSIGTERM a.out; done
我收到了很多 Terminated 143 消息。
但如果我使用 gcc(而不是 g++),我无法使用非零退出代码来了解情况。
在这方面,我的问题是如何让一个 C++(g++ 编译)程序与 C(gcc 编译)程序有类似的行为?
最好采用最大标准化方法。
在 QNX 6.5、gcc 4.7.2 上测试
【问题讨论】:
标签: c++ c gcc qnx signal-handling