在我的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确实停止并说我的程序收到了一个信号;它仍然不会触发处理程序。 –