我使用signal(SIGINT,my_handler)
将SIGINT
指向my_handler
。一段时间后,我想将它重置为它指向的一般默认处理程序。我怎么能这样做?
答案 0 :(得分:10)
将SIG_DFL
作为func
参数传递给signal()
以重置默认行为:
signal(SIGINT, SIG_DFL);
答案 1 :(得分:0)
今天,建议使用sigaction。
此外,它允许您在第一次调用自定义处理程序之前将信号处理程序自动重置为默认值。
SA_RESETHAND
如果设置,则信号的处置应重设为
SIG_DFL
,并且SA_SIGINFO
标志应在进入信号处理程序时清除。注意:
SIGILL
和SIGTRAP
交付时无法自动重置;系统 默默地强制执行此限制。否则,信号的输入在进入 信号处理程序。
此外,如果设置了此标志,则
sigaction()
的行为可能类似于SA_NODEFER
标志也被设置。
#include <signal.h>
#include <stdio.h>
action.sa_handler = my_handler;
action.sa_flags = SA_RESETHAND;
if (sigaction(SIGINT, &action, NULL) == -1)
{
perror("Failed to install signal handler for SIGINT");
}