15

下面的这个语句有什么作用?如果有人能解释这个功能,我将不胜感激。

signal(SIGINT, SIG_DFL);
4

4 回答 4

8

SIGINT 是中断信号 (ctrl+C)。它的默认行为是终止进程。SIGINT 信号可以被释放,意味着可以改变默认行为(通过调用 sighandler,或者设置它 SIG_IGN) 现在一旦动作改变并且你想再次设置它这个信号的默认行为,那么你应该写

信号(SIGINT,SIG_DFL);

它将再次改变信号的默认行为。(即终止一个进程)

于 2017-03-26T10:41:17.327 回答
5

将 SIGINT 信号的处理设置为其默认值。

如果您在 *nix 系统上,请尝试man signal获得这样的答案。那(也许检查“另见”下列出的一些页面)也会告诉你什么是信号。

至于默认值是什么——它将是“忽略它”、“终止程序”或“导致程序转储核心”之一。它取决于具体的信号,我不记得 SIGINT 的默认值,抱歉。

于 2013-04-30T07:14:17.803 回答
5

您编写的行将中断信号的信号处理程序更改回默认值

void myInterruptHandler (int signum) { 
    printf("You pressed ctrl+c, but I don't care\n");
 }

int main(){
  sighandler_t oldHandler = signal(SIGINT, myInterruptHandler);
  while(true){
    printf("Ctrl + C can't kill me!!\n");
    sleep(1000);
  }
  //Change back to the old handler
  signal(SIGINT, oldHandler);
  //alternatively:  signal(SIGINT, SIG_DFL);
}
于 2013-04-30T07:29:04.230 回答
2

它设置 SIGINT 的默认操作,如下面的手册页所述;

来自 Linux 信号手册页;

sighandler_t signal(int signum, sighandler_t handler);

signal() 函数将信号符号的处置设置为处理程序,它是 SIG_IGN、SIG_DFL 或程序员定义函数的地址。

  • 如果处置设置为 SIG_IGN,则忽略该信号。
  • 如果处置设置为 SIG_DFL,则发生与信号关联的默认操作。
于 2013-04-30T07:16:33.780 回答