置頂
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);
…
}
會員登入
(先登入會員才能回覆留言喔!)