我有一个示例程序,每秒触发一次SIGALRM。以下是我的代码。
#include <signal.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
volatile sig_atomic_t _flag = false;
void _sigHandler( int signal )
{
_flag = true;
}
int main()
{
signal( SIGALRM, _sigHandler );
alarm( 1 );
while (true)
{
if ( _flag)
{
printf( "SIGALRM received\n" );
_flag = false;
alarm( 1 );
}
}
}
我的问题是,根据传递给alarm()的参数,是否可以为同一信号设置多个信号处理程序;方法。例如。如果我呼叫报警(1)和报警(2),则必须调用两种不同的方法 好吧,我在这里使用闹钟的想法是,我想在3个不同的时间间隔中调用三种不同的方法。例如调用func1();每隔X秒后,在每Y秒后调用func2()并在每Z秒后调用func3(),这将在无限循环中运行。如果警报的想法不适合这里,那么任何其他提示/帮助都会受到赞赏。
答案 0 :(得分:2)
是否可以根据传递给警报的参数()为同一信号设置多个信号处理程序。
没有。任何时候信号都只能有一个信号处理程序。如果您安装了许多,则最后一个是唯一有效的。
如果我呼叫报警(1)和报警(2),则必须调用两种不同的方法。
alarm()
在指定的时间间隔后引发SIGALRM。如果有SIGALRM的信号处理程序,它甚至不知道知道/关心,更不用说&#34;多个&#34;信号处理程序。简而言之,这是不可能的。
答案 1 :(得分:0)
每个信号只能使用一个信号处理程序。代码中的最后一个信号处理程序是使用的那个,这意味着如果你写:
signal(SIGALRM, signal_handler_1);
/* do some l33t stuff */
signal(SIGALRM, signal_handler_2);
SIGALRM
将由signal_handler_2
处理。