天天看點

Linux信号中斷處理

1.kill産生一個信号:   extern int kill (__pid_t __pid, int __sig);   pid>0:将信号發送給程序的pid為pid的程序;   pid=0:将信号發送給和目前程序在同一個程序組的所有程序;   pid=-1:将信号發送給系統内的所有程序;   pid<0:将信号發送給程序組号PGID為pid絕對值的所有程序;   成功傳回0;失敗傳回值-1.

2.raise自舉一個信号:   extern int raise (int __sig);   它用來給目前程序發送一個信号,即喚醒一個程序。

3.alarm()定時:   extern unsigned int alarm(unsigned int __seconds);   定時産生信号,即在多少時間内産生SIGALRM信号;并不是循環産生,而是每調用一次,産生一次。   如果sec為0,則取消所有先前發出報警的請求。

4.ualarm()定時:   extern __usconds_t ualarm(__useconds_t __value, __useconds_t __interval);   在使目前程序在指定時間(第一個參數)内産生SIGALRM信号,然後每隔指定時間(第二個參數)重複産生SIGALRM信号。

5.信号處理:   (1)忽略此信号,但有兩種信号不能被忽略:SIGKILL和SIGSTOP。   (2)捕捉信号:   (3)執行系統預設操作

6.signal安裝信号:   typedef void (*__sighandler_t) (int);   extern __sighandler_t signal(int __sig, __sighandler_t __handler);   第二個參數為處理信号的代碼入口或下面幾個宏:   #define SIG_ERR ((__sighandler_t) -1);   #define SIG_DFL  ((__sighandler_t) 0);   #define SIG_IGN  ((__sighandler_t) 1);

7.sigaction安裝信号:   extern int sigaction (int __sig, struct sigaction * __act, struct sigaction * __oact);   第一個參數為接收到的信号;   第二個參數用來指定欲設定的信号處理資訊;   第三個參數将傳回執行此程式前此信号處理資訊;

繼續閱讀