在我的main()的開始,我有:爲什麼信號不會被捕獲?
signal(SIGTERM, SIGTERM_handler);
SIGTERM_handler是:
void SIGTERM_handler(int signum) {
NSLog(@"Caught signal: [%d]. Cleaning up ...",signum);
//cleanup();
NSLog(@"Done cleaning up. Exiting ...");
exit(EXIT_FAILURE);
}
那些線從來沒有印刷。當我在處理程序中設置斷點時,它們從不被擊中。我不會在任何地方撥打sigaction()
。 GDB設置爲通過我關心的信號(handle SIGTERM SIGINT pass stop print
或handle SIGTERM SIGINT pass nostop print
)。即使是默認的信號處理程序也不起作用 - 向程序發送SIGINT(爲此我沒有指定處理程序)也什麼都不做。
這可能是什麼原因造成的?
有沒有可能日誌文件緩衝區沒有被刷新? –
如何在gdb中運行時將信號發送給您的進程?我會建議嘗試其他信號之一(比如殺死-1或殺死-2) – KevinDTimm
我發送的信號包括'kill -2','kill -15'和其他信號。我知道這是行得通的,因爲如果我轉而做「處理...停止」,那麼GDB確實停止並說我的程序收到了一個信號;它仍然不會觸發處理程序。 –