我正在尝试将信号和警报结合起来。我有 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
...
}