如何将SIGINT指向某个用户定义的处理程序一段时间后将其重置为默认值?

时间:2010-09-05 06:00:19

标签: c++ signals

我使用signal(SIGINT,my_handler)SIGINT指向my_handler。一段时间后,我想将它重置为它指向的一般默认处理程序。我怎么能这样做?

2 个答案:

答案 0 :(得分:10)

SIG_DFL作为func参数传递给signal()以重置默认行为:

signal(SIGINT, SIG_DFL);

答案 1 :(得分:0)

今天,建议使用sigaction

此外,它允许您在第一次调用自定义处理程序之前将信号处理程序自动重置为默认值。

  

SA_RESETHAND

     

如果设置,则信号的处置应重设为SIG_DFL,并且   SA_SIGINFO标志应在进入信号处理程序时清除。

     

注意:   SIGILLSIGTRAP交付时无法自动重置;系统   默默地强制执行此限制。

     

否则,信号的输入在进入   信号处理程序。

     

此外,如果设置了此标志,则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");
}