0
我试图结合信号和报警。 我有2个进程。 1正在接收来自用户的输入,并将其写入管道,然后向另一个进程发送信号(SIGUSR2)。 在另一个过程中,我有每秒产生一次警报的无限循环。所以我的程序应该处理报警信号和SIGUSR2信号。 警报手柄正常工作,但是当信号到达并且信号处理程序处于活动状态时,它似乎不会返回到产生警报的回路。 我看了报警和信号的手册页,没有找到任何东西。它说信号处理函数应该返回到原始代码,但它不。 我想知道为什么代码不会在信号处理程序后返回到循环,以及如何强制它每秒钟执行警报处理函数,即使同时收到信号也是如此。信号到达时报警停止
这是循环:
while (1) {
signal (SIGUSR2 , signal_hand);
signal (SIGALRM , alarm_hand);
alarm (1);
pause();
}
这是信号处理函数:
void signal_hand (int sig) {
// reading from the pipe and doing things accordingly
...
}
这是报警处理函数:
void alarm_hand (int sig) {
// doing things
...
}
首先,它不返回到循环,因为如果 只有1个SIGUSR2信号到达它不会激活警报。我等了10秒,它什么也没做。 我没有把信号处理程序移到循环之外,谢谢。 但是,如果我将警报(1)移到循环外并在警报处理程序功能中再次调用它,它只会执行一次警报功能。除此之外,循环除了闹钟(1)和暂停()之外什么也不做,所以如果我把它们移到循环外面,我可以完全清理循环。 – 2013-05-08 16:49:33
它肯定应该返回到循环。信号到达后,'pause()'返回。为什么不添加一些调试'printf()'到循环中以说服哪些代码行正在执行? – Celada 2013-05-08 16:53:53
好吧,它的工作原理,我只需要在报警处理程序函数内部清除报警处理函数。非常感谢你! – 2013-05-08 17:15:48