信号处理程序是否意味着无限期运行?

时间:2016-12-11 21:34:59

标签: c++ linux windows signals

#include <iostream>
#include <csignal>

void handler(int signo){
    std::cout << "Caught " << (signo == SIGINT) << std::endl;
}

int main(){
    signal(SIGINT, handler);
    while(true) ;

}

在Windows和Linux上,当按 Cntrl + C 多次时,这些似乎会做两件事。在Linux上我会多次看到被捕获的消息,而在Windows上我将看到被捕获的消息一次,并且在第二次按 Cntrl + C 时我的程序将关闭。处理程序是否只能捕获信号一次或无限期?或者是否有我失踪的Windows属性导致程序在第二次按下时关闭?

As far as I can tell Cntrl + C 在Windows上被视为SIGINT,就像在Linux上一样。

1 个答案:

答案 0 :(得分:2)

这取决于signal的实现,sigaction可能等同SA_RESETHAND设置sigaction标志或清除 - 根据POSIX和C标准,这是可接受的。< / p>

如果要控制此行为,则需要使用signal而不是{{1}}来设置信号处理程序并设置标志以获得所需的行为。