以下問題已找到答案了,各位不用回答了
Note that if a given signal was previously set to be ignored,
this code avoids altering that setting.
This is because non-job-control shells often ignore certain signals
when starting children, and it is important for the children to respect this.
開發平台(Platform): GCC
額外使用到的函數庫(Library Used): NO
問題(Question):
我在很多地方都會看到signal()被重覆呼叫,有點不解。
比如說我在GNU C Library的24.3.1節,看到如下的範例。
(原文網址: http://goo.gl/Kz7yhf)
如果我沒有理解錯誤,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()做什麼?
它為什麼要這麼做?
程式碼(Code):
#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);
…
}