【发布时间】:2017-05-31 15:21:36
【问题描述】:
这里是这个问题的简单重现:
void handler(int sig){
if(sig == SIGINT){
printf("Signal caught\n");
execl("./recreate","./recreate",NULL);
}
}
int main(){
printf("Main start\n");
signal(SIGINT,handler);
while(1);
return 0;
}
它只是在收到信号后再次运行。发生的情况是它只能从终端读取 CTR+C 一次。从第二点开始,只需在控制台上写入 ^C 即可。我是否需要每次都重置处理程序或类似的东西?提前致谢。
【问题讨论】:
-
signal的行为取决于您拥有的 Unix 变体。要获得一致的行为,请改用sigaction。 -
有很好的一般信号处理文档,特别是
signal()函数可以在线获取,也可以通过man命令获取。 -
另请注意,
printf不被认为是在信号处理程序中调用的安全函数。