我在使用一小段代码时遇到了困难:
act_therm.sa_handler=handler_therm;
sigaction(SIGUSR1,&act_thermom,NULL);
while(1){
raise(SIGUSR1);
sleep(1);
}
代码编译完美但函数handler_term仅启动一次。看起来信号的行为在第一次被提升后被重置为默认值。
答案 0 :(得分:0)
我终于在一本书中找到了完整的答案:
通过声明结构:
struct sigaction act_therm;
act_therm.sa_handler=handler_therm;
标志SA_RESETHAND(默认情况下)附加到结构。每次使用它调用sigaction时,它都会恢复信号的默认行为。
有两种方法可以解决这个问题:
struct sigaction { void (*sa_handler) (int); void (*sa_sigaction) (int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer) (void); };