Bre*_*own 10 c linux signals event-handling
我用:
signal(SIGINT, CtrlHandler);
Run Code Online (Sandbox Code Playgroud)
添加SIGINT
事件处理程序.但是我怎么能删除这个处理程序?
Omn*_*ous 17
这是你做的:
signal(SIGINT, SIG_DFL);
Run Code Online (Sandbox Code Playgroud)
这会将信号处理程序重置为该信号的默认行为(如果尚未设置,则包括默认处置).在SIGINT的情况下,它会在没有核心转储的情况下中止您的进程.
该手册signal
解释了为什么这样做:
signal(signum, handler)
设置信号的布置signum
来handler
,其是SIG_IGN
,SIG_DFL
或程序员定义的函数的地址("信号处理器")....如果处置设置为SIG_DFL
,则会发生与信号关联的默认操作.
您也可以使用该man
命令查找此信息.如果您man signal
在命令行上键入并通读,您应该看到它.
这非常特定于您已替换系统默认信号处理程序的情况.在某些情况下,你想要的只是简单地恢复那里的任何处理程序.如果你看一下signal
它的定义,看起来像这样:
sighandler_t signal(int signum, sighandler_t handler);
Run Code Online (Sandbox Code Playgroud)
所以,它返回一个sighandler_t
.在sighandler_t
它返回表示信号的前一个"性格".因此,另一种处理方法是简单地保存它返回的值,然后在想要删除自己的处理程序时恢复该值.
归档时间: |
|
查看次数: |
8690 次 |
最近记录: |