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