#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上一样。
答案 0 :(得分:2)
这取决于signal
的实现,sigaction
可能等同SA_RESETHAND
设置sigaction
标志或清除 - 根据POSIX和C标准,这是可接受的。< / p>
如果要控制此行为,则需要使用signal
而不是{{1}}来设置信号处理程序并设置标志以获得所需的行为。