每次在终端内按 Ctrl + C 时,SIGINT信号都会发送到进程。但是有时候这个过程会发生什么,而且它没有响应信号? 基本上,我在问一个过程如何在理论上忽略信号?
答案 0 :(得分:4)
除了SIGKILL和SIGSTOP之外,任何进程都可以自由地为任何信号安装自己的处理程序,它可以响应它喜欢的(直到并完全忽略信号)。
答案 1 :(得分:3)
你应该安装信号处理程序。最简单的是:
#include <signal.h>
...
/* Put this somewhere at the beginning of your code */
sigignore(SIGINT);
这将导致忽略指定的信号(SIGINT)。或者,您可以在信号发生时调用一些函数:
void function(int sig)
{
// do something
}
// Somewhere at the beginning of your code put this...
sigset(SIGINT, function);
请参阅相应手册页中的详细信息。还有更复杂的功能来操纵信号,例如的sigaction。