可能重複:
What is the difference between sigaction and signal?那麼sigaction()和signal()之間有什麼區別?
在我看來,他們兩個可以用來註冊回調特定信號。
你如何選擇使用哪一個?
可能重複:
What is the difference between sigaction and signal?那麼sigaction()和signal()之間有什麼區別?
在我看來,他們兩個可以用來註冊回調特定信號。
你如何選擇使用哪一個?
TLPI
UNIX系統提供的 兩種方式改變的信號的配置:
signal()
和sigaction()
。 sigaction()系統調用是 替代信號(),用於設置 信號的配置。雖然 sigaction()比signal()更復雜 ,但作爲回報, 提供了更大的靈活性。
sigaction
也比signal
更便攜。另外,通過sigaction
,您可以指定接收附加參數的信號處理程序(sa_sigaction
與sa_handler
)。
/* can be installed by signal/sigaction */
void(*) (int);
/* can be installed by sigaction only */
void(*) (int, siginfo_t *, void *);
從我的觀點來看,所不同的(除了接口:)和便攜性)是在行爲信號被捕獲後:
如果配置被設定爲一個函數,那麼第一任處置重置爲SIG_DFL,或信號被阻塞(請參閱下面的可移植性),然後使用參數signum調用處理程序。如果對處理程序的調用導致信號被阻塞,則從處理程序返回時信號將被解除阻塞。
而且,我也想重複相同手冊頁說:
信號()的行爲在UNIX版本的不同而不同,也跨越不同版本的Linux的歷史變化。避免使用它:改爲使用sigaction(2)。
[This](http://stackoverflow.com/questions/231912/what-is-the-difference-between-sigaction-and-signal)。 – jmkeyes 2011-05-23 07:52:23