信號處理機制在linux編程中非常重要,它類似于單片機中的中斷系統;我們在編寫中斷函數時,需要設置中斷函數的地址,設置其相應的寄存器,以便于產生中斷事件時可以正確的跳到中斷函數去履行;
linux中信號和這個類似,1般的編程模型是定義中斷函數,然后把中斷函數注冊,使得進程收到特定的信號時,可以跳到信號處理函數去履行;
1.kill函數與raise函數
kill函數用來將信號發送給進程或進程組;
――int kill(pid_t pid, int signo);
raise函數則允許進程向本身發送信號;
――int raise(int signo);
調用raise(signo);等價于kill(getpid(), signo);
不單單是kill函數 kill命令也能夠用來發送信號:
如:
kill -l ――列出所有信號
kill -s 10 pid ―― 10代表SIGUSR1 pid代表向哪一個進程發送USR1信號
也能夠這樣寫:kill -USR1 pid
回到kill函數;
注意:kill函數的第1個參數:
下面是1個使用kill函數的例子:
2. alarm函數和pause函數
alarm函數用來設定計時器,設定的某個時間超時時,會產生1個SIGALRM信號,如果不捕捉改信號,默許會終止調用該alarm函數的進程。
―― unsigned int alarm(unsigned int seconds);
pause函數使得調用進程掛起直到捕捉到1個信號。
―― int pause(void);
實例:
1個可以包括多個信號的信號集,這個數據類型是sigset_t,同時,也有相應的信號集函數;
還有以下1些函數:
上一篇 數據平臺調度系統的設計
下一篇 IT運維----IT服務的長青樹