2012-08-22 70 views
0

將忽略的信號設置爲SIG_DFL我正在編寫一個庫,其中fork()和execvp()啓動另一個程序。據我所知,execvX()將「自定義」信號處理程序重置爲SIG_DFL,但它不會將任何忽略的信號處理程序設置爲SIG_DFL。execvp()

記住它是一個庫,我無法控制用戶將如何處理這些信號,將被忽略信號的信號處理程序設置爲SIG_DFL是一個好主意嗎?

如果是這樣,是否有某種方法可以將所有信號處理程序一次設置爲SIG_DFL?我是否必須遍歷所有的信號數字?在這種情況下,我怎樣才能找到最後一個可能的信號編號?我已經看到位/ signum.h中有_NSIG。這是POSIX的不變部分,還是Linux專用?

謝謝。

回答

1

根據execve(2)手冊頁,

正在捕獲任何信號的性格是重置爲默認 (signal(7))。

signal(7)手冊頁補充說:

期間execve(2),處理信號的處置是 重置爲默認值;被忽略的信號的配置保持不變。

所以,你需要重新設置一個接一個的信號要忽略或之前您execve

默認我看到/usr/include/signal.h

+0

感謝一個NSIG不變,我沒有意識到NSIG。 –

+0

另請參閱'feature_test_macros(7)'手冊頁,您可能需要'-D_GNU_SOURCE' –