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