signal和sigaction的區別


下面所指的signal都是指以前的older signal函數,現在大多系統都用sigaction重新實現了signal函數
1、signal在調用handler之前先把信號的handler指針恢復;sigaction調用之后不會恢復handler指針,直到再次調用sigaction修改handler指針。
:這樣,(1)signal就會丟失信號,而且不能處理重復的信號,而sigaction就可以。因為signal在得到信號和調用handler之間有個時間把handler恢復了,這樣再次接收到此信號就會執行默認的handler。(雖然有些調用,在handler的以開頭再次置handler,這樣只能保證丟信號的概率降低,但是不能保證所有的信號都能正確處理)
2、signal在調用過程不支持信號block;sigaction調用后在handler調用之前會把屏蔽信號(屏蔽信號中自動默認包含傳送的該信號)加入信號中,handler調用后會自動恢復信號到原先的值。
(2)signal處理過程中就不能提供阻塞某些信號的功能,sigaction就可以阻指定的信號和本身處理的信號,直到handler處理結束。這樣就可以阻塞本身處理的信號,到handler結束就可以再次接受重復的信號。
3、sigaction提供了比signal多的多的功能,可以參考man
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM