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
由於執行的代碼量不同,只是不同的時間,我會假設。你想要的行爲是**不可能**沒有父母的幫助,但這並不意味着失敗很容易觀察。這是短距離賽車的本質。 –