【发布时间】:2016-04-01 18:20:43
【问题描述】:
我很难用一小段代码:
act_therm.sa_handler=handler_therm;
sigaction(SIGUSR1,&act_thermom,NULL);
while(1){
raise(SIGUSR1);
sleep(1);
}
代码正在完美编译,但函数 handler_term 仅启动一次。信号的行为似乎在首次引发后被重置为默认值。
【问题讨论】:
-
我有一种感觉,一旦调用了信号处理程序,就会恢复默认操作,除非您摆弄
act_therm结构的其他部分。也许阅读手册页sigaction -
我尝试添加 sigaction(SIGUSR1,&temp,NULL);在while循环中,它的工作。就像 sigaction 只工作一次......
-
问题也可能出在处理程序本身,见Minimal Complete Verifiable Example。
-
谢谢,但这并不能解释为什么它与 while 循环中的 sigaction 一起工作
-
当您在循环中反复调用 sigaction 时它起作用的事实向我表明 Ed 是正确的并且您设置了
SA_RESETHAND因为您没有在设置 @ 之前将您的struct sigaction归零987654327@.