訊號處理 signal和sigaction的區別

2021-06-20 06:09:51 字數 624 閱讀 9526

下面所指的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

Signal訊號處理

在goahead的linux模組main.c 檔案中,main函式中出現了以下三個語句 signal sigpipe,sig ign signal sigint,siginthandler signal sigterm,siginthandler 這三條語句與網路訊號有關。在這裡做咯記錄。1.訊號概...

signal訊號處理機制

可以用函式signal註冊乙個訊號捕捉函式。原型為 include typedef void sighandler t int sighandler t signal int signum,sighandler t handler signal的第1個引數signum表示要捕捉的訊號,第2個引數是個...

signal訊號處理基礎篇

signal函式的原型如下void signal int void fun int int 由此可見該函式的返回值是乙個指向 void fun int 型別的指標,即返回上一次和該訊號繫結的 訊號處理函式位址。程序對訊號的處理有三種方式 1 忽略此訊號,如signal sigint,sig ign ...