評價: 0 回應: 0 閱覽: 158
置頂

signal()重覆呼叫問題

我在很多地方都會看到signal()被重覆呼叫,有點不解。

如果我沒有理解錯誤,signal的return是原本的預設Handler,所以,

if (signal (SIGINT, termination_handler) == SIG_IGN)
    signal (SIGINT, SIG_IGN);

表示如果SIGINT的預設處理方式是忽略(SIG_IGN),則再將
SIGINT出現時的Hander設成SIG_IGN,即恢復成忽略。

那這樣做,signal (SIGINT, termination_handler)不就變成沒做用了嗎?
那還費時去寫termination_hander()做什麼?

它為什麼要這麼做?

#include <signal.h>

void termination_handler (int signum) {
 struct temp_file *p;
 for (p = temp_file_list; p; p = p->next) unlink (p->name);
}

int main (void) {

 …

 if (signal (SIGINT, termination_handler) == SIG_IGN)
     signal (SIGINT, SIG_IGN);
 if (signal (SIGHUP, termination_handler) == SIG_IGN)
     signal (SIGHUP, SIG_IGN);
 if (signal (SIGTERM, termination_handler) == SIG_IGN)
     signal (SIGTERM, SIG_IGN);

 …
}

 

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言