Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UNIX进程如何忽略系统信号?_Unix_Process_Signals - Fatal编程技术网

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

UNIX进程如何忽略系统信号?,unix,process,signals,Unix,Process,Signals,每次我在终端内按Ctrl+C时,都会向进程发送一个SIGINT信号。但是,这个过程有时会发生什么,而它对信号没有反应呢? 基本上,我想问的是,从理论上讲,一个进程如何能够忽略信号?除了SIGKILL和SIGSTOP之外,任何进程都可以为任何信号自由安装自己的处理程序,该处理程序可以随意响应(包括完全忽略信号)。您应该安装信号处理程序。最简单的是: #include <signal.h> ... /* Put this somewhere at the beginning of you

每次我在终端内按Ctrl+C时,都会向进程发送一个SIGINT信号。但是,这个过程有时会发生什么,而它对信号没有反应呢?
基本上,我想问的是,从理论上讲,一个进程如何能够忽略信号?

除了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);