2013-08-31 27 views
1

我是一名新手,對linux有基本的瞭解。如何讓進程忽略某些信號(如SIGHUP,SIGABRT,SIGABORT,SIGINT等)。

每當內核遇到特定進程的信號時,首先會檢查特定進程的進程控制塊(PCB)中的信號處理程序表。如果信號處理程序已註冊,它將調用該函數。如果標誌是SIG_DEFAULT,那麼它調用在內核的全局信號表中註冊的信號處理程序。如果標誌是SIG_IGNORE,那麼內核會忽略特定進程的信號。

所有的信號都有內核默認的信號處理程序已經在信號表中進行了註冊。

我只想知道進程如何將標誌從SIG_DEFAULT更改爲SIG_IGNORE。請解釋機制(使用系統調用或更改信號表或PCB)。下一次當信號再次被捕獲時,內核會做什麼優化。

+1

用戶進程?它調用'signal'或'sigaction'來改變配置。 – Duck

+0

編譯器在再次捕獲信號時是否有任何優化? –

+1

不是我知道,但我想你可以檢查包裝sys_calls的glibc源。 – Duck

回答

1

調用signal函數。請注意,有些信號可能不會被忽略。

+0

信號或sigaction可以使用,但想知道下次信號處理優化的內核,在全局符號表中做了哪些更改。 –

+0

@SantoshSahu:所以把它放在問題的標題中可能是個好主意。也許現在又提出了另一個新的問題,問到這一點。 – alk

相關問題