21.Linux/Unix 系統程式設計手冊(上) -- 訊號:訊號處理器函式
阿新 • • 發佈:2018-12-11
1.可重入函式 如果同一個程序的多條執行緒可以同時安全的呼叫某一函式,那麼該函式就是可重入的。 2.非同步訊號安全函式 指當訊號處理函式呼叫時,可以保證其實現是安全的。如果某一函式是可重入的,又或者 訊號處理函式無法將其中斷,就稱該函式是非同步訊號函式. 3.全域性變數和 sig_atomic_t 資料型別 對全域性變數的讀寫可能不止一條機器指令,而訊號處理函式就可能會在這些指令之間 將主程式中斷(也將此類變數訪問稱為非原子操作).因此C語言標準定義了新的資料型別 sig_atomic_t ,意在保證讀寫操作的原子性。 4.在訊號處理函式中執行非本地跳轉 使用標準的 longjmp() 函式從處理函式中退出有一個問題。在之前曾經提過,在進入訊號處理函式中 時,核心會自動將引發呼叫的訊號加入到程序的訊號掩碼中,並在處理函式退出時將它們從掩碼中清除。 在 System V 中,longjmp() 不會將訊號掩碼恢復。因此,引入新函式。 5.在備選棧中處理訊號:sigaltstack() 6.系統呼叫的中斷和重啟 SA_RESTART sigsetjmp(); siglongjmp(); abort(); siginterrupt();