1. 程式人生 > >21.Linux/Unix 系統程式設計手冊(上) -- 訊號:訊號處理器函式

21.Linux/Unix 系統程式設計手冊(上) -- 訊號:訊號處理器函式

1.可重入函式
	如果同一個程序的多條執行緒可以同時安全的呼叫某一函式,那麼該函式就是可重入的。

2.非同步訊號安全函式
	指當訊號處理函式呼叫時,可以保證其實現是安全的。如果某一函式是可重入的,又或者
  訊號處理函式無法將其中斷,就稱該函式是非同步訊號函式.

3.全域性變數和 sig_atomic_t 資料型別
	對全域性變數的讀寫可能不止一條機器指令,而訊號處理函式就可能會在這些指令之間
  將主程式中斷(也將此類變數訪問稱為非原子操作).因此C語言標準定義了新的資料型別
  sig_atomic_t ,意在保證讀寫操作的原子性。

4.在訊號處理函式中執行非本地跳轉
	使用標準的 longjmp() 函式從處理函式中退出有一個問題。在之前曾經提過,在進入訊號處理函式中
  時,核心會自動將引發呼叫的訊號加入到程序的訊號掩碼中,並在處理函式退出時將它們從掩碼中清除。
    在 System V 中,longjmp() 不會將訊號掩碼恢復。因此,引入新函式。

5.在備選棧中處理訊號:sigaltstack()

6.系統呼叫的中斷和重啟
	SA_RESTART
    
sigsetjmp();
siglongjmp();
abort();
siginterrupt();