1. 程式人生 > >《UNIX環境高階程式設計》筆記--kill函式,raise函式,alarm函式,pause函式

《UNIX環境高階程式設計》筆記--kill函式,raise函式,alarm函式,pause函式

1.kill函式和raise函式

kill函式將訊號傳送給程序或者程序組,raise函式則執行程序向自身傳送訊號。
#include <signal.h>
int kill(pid_t pid,int signo);
int raise(int signo);
//若成功,則返回0,出錯則返回-1.
呼叫raise(signo);等價於呼叫kill(getpid(),signo); kill的pid引數有4種不同的情況。 pid>0      將該訊號傳送給程序ID為pid的程序。 pid==0   將該訊號傳送給與傳送程序屬於同一程序組的所有程序(這些程序的程序組ID等於傳送程序的程序組ID)而且傳送 程序組具有向這些程序傳送訊號的許可權。這邊的所有程序不包含實現定義的系統程序集。 pid<0     將該訊號傳送給程序組ID等於pid的絕對值,而且傳送程序組具有向其傳送訊號的許可權,同樣,所有程序集並不包含 某些系統程序。 pid==-1  將該訊號傳送給傳送程序有許可權向它們傳送訊號的系統上的所有程序。不包含某些系統程序。 超級使用者可以將訊號傳送給任一程序,對於非超級使用者,其基本規則是:傳送者的實際或者有效使用者ID必須等於接受者的實際 或者有效使用者ID。 posix將編號為0的訊號定義為空訊號,如果signo引數為0,則kill仍執行正常的錯誤檢查,但是不傳送訊號,這常被用來 確定一個特定程序是否仍舊存在。如果向一個並不存在的程序傳送空訊號,則kill返回-1,並將errno設定為ESRCH。

2.alarm和pause函式

使用alarm函式可以執行一個計時器,在將來某個指定的時間該計時器會超時。當計時器超時時,產生SIGALRM訊號,如果不忽略
或捕捉此訊號,則其預設動作是終止呼叫該alarm函式的程序。
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
返回值:0或者以前設定的鬧鐘的餘留秒數。
其中,引數seconds的值是秒數,經過了指定的seconds後會產生訊號SIGALRM。每個程序只能有一個鬧鐘,如果在呼叫alarm時, 以前已為該程序設定過鬧鐘,而且還沒有超時,則將該鬧鐘時鐘的餘留值作為本次alarm函式呼叫的值返回。以前登記的鬧鐘時鐘 則被新值代替。 pause函式使呼叫程序掛起直至捕捉到一個訊號。
#include <unistd.h>
int pause(void); //返回值為-1,並將errno設定為EINTR。