UNIX进程如何忽略系统信号?

时间:2013-12-26 21:05:20

标签: unix process signals

每次在终端内按 Ctrl + C 时,SIGINT信号都会发送到进程。但是有时候这个过程会发生什么,而且它没有响应信号? 基本上,我在问一个过程如何在理论上忽略信号?

2 个答案:

答案 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。