UNIX进程如何忽略系统信号?
每次我在终端内按Ctrl+C时,都会向进程发送一个SIGINT信号。但是,这个过程有时会发生什么,而它对信号没有反应呢?UNIX进程如何忽略系统信号?,unix,process,signals,Unix,Process,Signals,每次我在终端内按Ctrl+C时,都会向进程发送一个SIGINT信号。但是,这个过程有时会发生什么,而它对信号没有反应呢? 基本上,我想问的是,从理论上讲,一个进程如何能够忽略信号?除了SIGKILL和SIGSTOP之外,任何进程都可以为任何信号自由安装自己的处理程序,该处理程序可以随意响应(包括完全忽略信号)。您应该安装信号处理程序。最简单的是: #include <signal.h> ... /* Put this somewhere at the beginning of you
基本上,我想问的是,从理论上讲,一个进程如何能够忽略信号?除了SIGKILL和SIGSTOP之外,任何进程都可以为任何信号自由安装自己的处理程序,该处理程序可以随意响应(包括完全忽略信号)。您应该安装信号处理程序。最简单的是:
#include <signal.h>
...
/* Put this somewhere at the beginning of your code */
sigignore(SIGINT);
详见相应手册页。还有更复杂的函数来处理信号,例如sigaction。是的,如果应用程序安装了SIGINT的处理程序,并且没有对其进行任何处理,那么当您按下Ctrl-C时,将不会发生任何事情。答案可能有点幼稚,因此我只是将其作为注释提交,以防相关。在shell中,只需将&添加到任何命令行的末尾,它将异步执行,并且ctrl+c不会有任何效果。好的,我知道了。但是你说“安装”是什么意思呢?@konstantinoskontinidis把这一切总结得比我好得多。
void function(int sig)
{
// do something
}
// Somewhere at the beginning of your code put this...
sigset(SIGINT, function);