我使用struct sigaction做信號量截獲,比如SIGHUP,第一次能收到消息并執行回調函數,但是當第二次收到SIGHUP的時候回調函數并沒有執行,是我漏掉了什么清理的地方么?memset(&sa,0,sizeof(struct sigaction));
sa.sa_handler = hup_signal;
sigemptyset(&sa.sa_mask); if (sigaction(SIGHUP, &sa, NULL) == -1) {
printf("sigaction(%d, SIGHUP) failed", SIGHUP); return 0;
}static void hup_signal(const int sig) { printf("get a hup signal %d\n", sig);
}
1 回答

互換的青春
TA貢獻1797條經驗 獲得超6個贊
可能是你系統版本太舊的緣故?
APUE有過說明 One problem with these early versions is that the action for a signal was reset to its default each time the signal occurred.
所以你可以每次調用處理函數后重新安裝一下處理函數,比如
void handler(int signal){ //do whatever signal(SIGHUP, handler); }
添加回答
舉報
0/150
提交
取消