程序間的通訊之訊號

2021-10-25 02:08:03 字數 1268 閱讀 5312

訊號是linux系統響應某些條件而產生的乙個事件,接收到該訊號的程序會相應的採取一些行動。可作為程序間傳遞訊息的一種方式,訊號可以被生成、捕獲、響應或忽略。訊號在signal.h中定義,訊號的名稱都以sig開頭如:sigalrm 超時警告;sigint:終端中斷。 如果程序接收到這些訊號中的乙個,但是事先沒有安排捕獲它,程序將會立刻終止。

程序通過呼叫kill函式向其他程序傳送乙個訊號,成功時返回0,失敗時返回-1

其定義為int kill(pid_t pid, int sig),kill函式把sig給定的訊號傳送給引數pid給出的程序號所指定的程序。

該函式的定義為void (*signal(int sig, void (*func)(int)))(int),帶有sig和func兩個引數,準備捕獲的訊號為sig引數,接收到指定的訊號後將要呼叫的函式由引數func指定,訊號處理函式必須有乙個int型別的引數(即接受到的訊號**)並且返回型別為void.

以模擬鬧鐘的形式,通過乙個程序向另乙個程序傳送sigalrm訊號來表現程序間的通訊。

vi alarm.c
#include #include #include #include #include static int alarm_fired = 0;

/*該函式用來模擬鬧鐘*/

void ding(int sig)

/*main函式中告訴子程序在等待5秒後傳送sigalrm訊號給它的父程序*/

int main()

/*父程序通過乙個signal呼叫捕獲sigalrm訊號的工作,等待該訊號的到來*/

printf("waitting for alarm to go on\n");

(void) signal(sigalrm, ding);

pause();

if (alarm_fired)

printf("ding!\n");

printf("done\n");

exit(0);

}

編譯執行

參考:linux程式設計第四版

程序間通訊之訊號

訊號是軟體中斷。很多比較重要的應用程式都需要處理訊號。訊號提供了一種處理非同步事件的方法。每個訊號都有乙個名字,並且他們的名字都是以sig開頭的。訊號的處理或相關動作有三種處理方式 1 預設訊號 sig dfl 2 忽略訊號 sig ign 大多數訊號可採用,除sigkill和sigstop外。3 ...

linux程序間通訊之訊號

1 wait 函式 原型 pid t wait int status 子程序退出時,它向父程序傳送乙個sigchld訊號,預設情況是總是忽略sigchld訊號,此時程序狀態一直保留在記憶體中,因此需要父程序去處理改訊號,處理的辦法則是呼叫wait 函式,收集子程序狀態資訊,並清空該資訊 使用wait...

程序間通訊之訊號講解

程序間通訊的另外一種方式 訊號 三 相關的介面函式 總結kill l 檢視linux系統中定義的所有訊號,程式設計師是不可以自定義訊號 1 kill 訊號的序號 程序的id 例如 kill 9 20000 kill kill 20000 kill sigint 20000 2 killall 訊號的...