天天看點

程序間通信:信号

<a href="http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html" target="_blank">http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html</a>

#include &lt;signal.h&gt;

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler));

int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact));

sigaction函數用于改變程序接收到特定信号後的行為。該函數的第一個參數為信号的值,可以為除SIGKILL及SIGSTOP外的任何一個特定有效的信号(為這兩個信号定義自己的處理函數,将導緻信号安裝錯誤)。第二個參數是指向結構sigaction的一個執行個體的指針,在結構sigaction的執行個體中,指定了對特定信号的處理,可以為空,程序會以預設方式對信号處理;第三個參數oldact指向的對象用來儲存傳回的原來對相應信号的處理,可指定oldact為NULL。如果把第二、第三個參數都設為NULL,那麼該函數可用于檢查信号的有效性。

SA_NODEFER:  一般情況下, 當信号處理函數運作時,核心将阻塞該給定信号。但是如果設定了 SA_NODEFER标記, 那麼在該信号處理函數運作時,核心将不會阻塞該信号

SA_RESETHAND:當使用者注冊的信号處理函數被執行過一次後,該信号的處理函數被設為系統預設的處理函數。

SA_SIGINFO 提供附加資訊,一個指向siginfo結構的指針以及一個指向程序上下文辨別符的指針

發送信号的主要函數有:kill()、raise()、 sigqueue()、alarm()、setitimer()以及abort()。

繼續閱讀