删除C中的Linux信号处理程序

删除C中的Linux信号处理程序,c,linux,event-handling,signals,C,Linux,Event Handling,Signals,我使用: 添加SIGINT事件的处理程序。但是如何删除此处理程序?以下是您要做的: signal(SIGINT, CtrlHandler); 这会将信号处理程序重置为该信号的默认行为(如果尚未设置,则包括默认处置)。在SIGINT的情况下,它会在没有核心转储的情况下中止进程 解释了为什么这样做有效: signal(signum,handler)将信号signum的配置设置为handler,即SIG\u-IGN、SIG\u-DFL,或程序员定义函数的地址(“信号处理程序”)。。。如果处置设置为S

我使用:

添加
SIGINT
事件的处理程序。但是如何删除此处理程序?

以下是您要做的:

signal(SIGINT, CtrlHandler);
这会将信号处理程序重置为该信号的默认行为(如果尚未设置,则包括默认处置)。在SIGINT的情况下,它会在没有核心转储的情况下中止进程

解释了为什么这样做有效:

signal(signum,handler)
将信号
signum
的配置设置为
handler
,即
SIG\u-IGN
SIG\u-DFL
,或程序员定义函数的地址(“信号处理程序”)。。。如果处置设置为
SIG_DFL
,则会发生与信号相关的默认操作

您还可以使用
man
命令查找此信息。如果在命令行上键入
man signal
,然后通读,您应该会看到它

这对于替换系统默认信号处理程序的情况非常特殊。在某些情况下,您需要的是简单地恢复最初存在的任何处理程序。如果你看一下
信号的定义,它看起来是这样的:

signal(SIGINT, SIG_DFL);

因此,它返回一个
sighandler\t
。它返回的
signandler\t
表示信号的先前“处置”。因此,另一种处理方法是保存它返回的值,然后在您想要删除自己的处理程序时恢复该值。

@jameshfisher-谢谢您的编辑。有时我会对那些不阅读手册的人感到沮丧。:-)如果应用程序安装了自己的信号处理程序,然后库临时安装了信号处理程序,该怎么办?在这种情况下,库需要还原以前的处理程序,而不是默认的处理程序。@jww-I解决了这个问题。这就是你要找的吗?
sighandler_t signal(int signum, sighandler_t handler);