程序間通訊之使用kill傳送訊號

2021-10-10 08:19:46 字數 1757 閱讀 1463

標頭檔案:#include

#include

定義函式:int kill(pid_t pid, int sig);

說明:系統呼叫kill()用來送引數sig 指定的訊號給引數pid 指定的程序或它的程序組。

引數pid 有幾種情況:

1、pid>0 將訊號傳給程序識別碼為pid 的程序;

2、pid=0 將訊號傳給和目前程序相同程序組的所有程序;

3、pid=-1 將訊號廣播傳送給系統內所有的程序,init程序除外;

4、pid<-1 將訊號傳給程序組識別碼為-pid的所有程序。

返回值:執行成功則返回0, 否則返回-1。

標頭檔案:#include

#include

定義函式:pid_t waitpid(pid_t pid, int * status, int options);

說明:waitpid()會暫時停止目前程序的執行,直到有訊號來到或子程序結束。如果在呼叫waitpid()時子程序已經結束,則waitpid()會立即返回子程序結束狀態值儲存在引數status 裡,而子程序的程序識別碼也會一快返回。如果不在意結束狀態值,則引數status 可以設成null。

引數pid 為欲等待的子程序識別碼:

1、pid<-1 等待程序組識別碼為pid 絕對值的任何子程序。

2、pid=-1 等待任何子程序, 相當於wait()。

3、pid=0 等待程序組識別碼與目前程序相同的任何子程序。

4、pid>0 等待任何子程序識別碼為pid 的子程序。

引數status:儲存子程序的結束狀態值。如果不使用status,將其設定成null。

引數option 可以為0 或下面的or 組合:

wnohang:如果沒有任何已經結束的子程序則馬上返回, 不阻塞程序執行;

wuntraced:如果子程序進入暫停執**況則馬上返回, 但結束狀態不予以理會. 子程序的結束狀態返回後存於status, 底下有幾個巨集可判別結束情況;

wifexited(status):如果子程序正常結束則為非0 值;

wexitstatus(status):取得子程序exit()返回的結束**, 一般會先用wifexited 來判斷是否正常結束才能使用此巨集;

wifsignaled(status):如果子程序是因為訊號而結束則此巨集值為真;

wtermsig(status):取得子程序因訊號而中止的訊號**, 一般會先用wifsignaled 來判斷後才使用此巨集;

wifstopped(status):如果子程序處於暫停執**況則此巨集值為真. 一般只有使用wuntraced時才會有此情況;

wstopsig(status):取得引發子程序暫停的訊號**, 一般會先用wifstopped 來判斷後才使用此巨集。

返回值:如果執行成功,則返回子程序識別碼(pid),如果有錯誤發生則返回-1,失敗原因存於errno 中。

三、乙個簡單的栗子

#include #include #include #include #include #include int main(int argc, char const *ar**)

else if (pid == 0)

else

else}}

return 0;

}

執行結果:

[xy@xunye signal]$ ./a.out 

i'm child process.

process[16419] killed.

程序間通訊之kill傳送訊號

c語言 利用kill函式實現乙個程序向另乙個程序傳送訊號 1.用於向任何程序組或程序傳送訊號 include signal.h intkill pid t pid,intsig 2.引數 pid 可能選擇有以下四種 1.pid大於零時,pid是訊號欲送往的程序的標識。2.pid等於零時,訊號將送往所...

C 使用kill傳送訊號終止目標程序

一 點睛 include includeint kill pid t pid,int sig 函式說明 kill 可以用來送引數sig指定的訊號給引數pid指定的程序。引數pid有幾種情況 引數sig表示準備傳送的訊號 如果其值為零,則沒有任何訊號發出,但是系統會執行錯誤檢查,通常會利用sig值為0...

父程序與子程序間相互傳送訊號

最近想要實現父子程序間的通訊,兩個程序間能 軟中斷 也就是使用signal函式將程序與handler函式繫結。其中的難點在於如何在父程序中獲取子程序的pid,由於實際的程式中,父程序有唯一的子程序,所以我採用的方法是 直接將父程序的 pid 1 也就獲取了子程序的pid,有一絲奇技淫巧的感覺,but...