0
我想捕获发送到我的程序的信号并执行简单的操作(例如,使用指定的代码退出)。但是如果进程在我的信号处理程序设置之前收到一个信号,它会异常退出,就像没有处理程序存在。我简单的程序的即使程序刚刚启动,是否可以始终捕获信号?
的源代码:
#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(gcc编译)程序与C(gcc编译)程序相似的行为?
最好采用最大标准化方法。
在测试了QNX 6.5,GCC 4.7.2
但是,为什么使用c而不是C++时会出现如此不同的行为?在C++的情况下一些更复杂的初始化?是否有可能简化它? – alexolut
由于执行的代码量不同,只是不同的时间,我会假设。你想要的行为是**不可能**没有父母的帮助,但这并不意味着失败很容易观察。这是短距离赛车的本质。 –