[問題] signal()重覆呼叫問題

作者: rudyych (熊熊)   2014-10-02 10:02:13
以下問題已找到答案了,各位不用回答了
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);

}
作者: rudyych (熊熊)   2014-10-02 10:16:00
啊... 這個我懂了。可是我無法自刪本文。
作者: loveme00835 (髮箍)   2014-10-04 03:45:00
問完刪文怕丟臉嗎?
作者: rudyych (熊熊)   2014-10-04 11:12:00
我自問自答沒麻煩到大家。想自刪是不想浪費大家時間看我的問題。不過你這樣就噓我就很沒有禮貌。
作者: uranusjr (←這人是超級笨蛋)   2014-10-05 01:54:00
真不想浪費人時間就把你自己的解答放上來, 讓下一個人能直接看到答案。你這樣滿足自己需求之後想斷別人路, 被人質疑還在那邊爭, 才真的浪費時間(還順便浪費別人時間)
作者: KoenigseggG (地表最速)   2014-10-05 21:21:00
他板主這樣噓用意不同吧@@
作者: rudyych (熊熊)   2014-10-06 12:40:00
U大,為了怕大家費時看我問題,我的確有把我的回答放在最上面。就是因為他是板主,我才覺得他不可以這樣就噓我。其實這篇保留,對我也我所謂。我真的只是怕浪費大家時間。造成大家困擾,真的很抱歉。

Links booklink

Contact Us: admin [ a t ] ucptt.com