Linux程序間通訊(二) 訊號機制

2021-09-30 20:12:19 字數 2770 閱讀 5934

訊號方式

軟中斷訊號signal,簡稱訊號,用來通知程序發生了非同步時間。

程序之間可以通過系統呼叫kill等函式來傳送軟中斷訊號,通知程序發生了某個事件,但訊號只能用來通知程序發生了什麼事件,並不給該程序傳遞任何資料

訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達

訊號處理的三個過程:傳送訊號、接收訊號、處理訊號

訊號處理的三種方式:

一、使用

二、演示程式

1、程式一

test3-1-2中自定義幾個訊號處理函式,其中部分是截獲後列印資訊,程式繼續;部分是截獲後列印資訊,程式退出。

test3-1-1中定時向test3-1-2傳送相應的訊號,同時可以通過控制台手工向test3-1-2傳送相應的訊號。

//test3-1-1

#include #include #include #include #include #define sigprint_continue 34 //自定義訊號,大於34的訊號量都是未定義的,可使用

#define sigprint_term 35

int main()

\'","r");

char buffer[10] = ;

fgets(buffer, 10, fp);

pid=atoi(buffer);

kill(pid,sigprint_continue); //向test3-1-2傳送sigprint_continue訊號

sleep(10);

kill(pid,sigprint_term); 向test3-1-2傳送sigprint_term訊號

while(1)

sleep(1);

}

#include #include #include #include #define sigprint_continue 34

#define sigprint_term 35

/*訊號sigprint_continue的處理函式*/

void print_continue(int sig)

/*訊號sigprint_term的處理函式*/

void print_term(int sig)

/*相應鍵盤輸出產生的中斷的處理函式*/

void replykeyinput(int sig)

int main()

執行結果:

2、程式二

test3-2-1寫檔案(此時test3-2-2延時等待)後用自定義的特定訊號通知test3-2-2去讀,自己變為延時等待狀態;

test3-2-2收到此訊號後去讀檔案的內容,讀取後清空檔案,寫入新的內容,再用自定義的特定訊號通知3-2-1去讀,自己變為演示等待狀態。

//test3-2-1

#include #include #include #include #include #define sigfileready 34 //自定義訊號量34為檔案已準備訊號

#define file_path "myfile"

#define bufsize 50

#define his "test3-2-2"

char buffer[bufsize];

int pid=0;

/*訊號sigfileready的處理函式*/

void opfile(int sig)

int main()

\'","r");

char buf[10] = ;

fgets(buf, 10, fp);

pid=atoi(buf);

}sleep(1);

(void)signal(sigfileready,opfile);

kill(pid,sigfileready);

while(1)

sleep(1);

}

//test3-2-2

#include #include #include #include #include #define sigfileready 34 //自定義訊號量34為檔案已準備訊號

#define file_path "myfile"

#define bufsize 50

#define his "test3-2-1"

char buf[bufsize];

int pid=0;

/*訊號sigfileready的處理函式*/

void opfile(int sig)

int main()

\'","r");

char buf[10] = ;

fgets(buf, 10, fp);

pid=atoi(buf);

}(void)signal(sigfileready,opfile);

while(1)

sleep(1);

}

執行結果:

程序間通訊 訊號機制

最近工作中,有需要用到乙個程序向另乙個程序發訊號.於是,寫了一簡單的例子 一.訊號接受方 include include static void sigaction handle int signum,siginfo t info,void p int main return 0 二.訊號傳送方 i...

程序間通訊之訊號機制 Linux

一 訊號 1 訊號的基本概念 每個訊號都對應乙個正整數常量 稱為 signal number,即訊號編號。定義在系統標頭檔案中 代表同一使用者的諸程序之間傳送事先約定的資訊的型別,用於通知某程序發生了某異常事件。每個程序在執行時,都要通過訊號機制來檢查是否有訊號到達。若有,便中斷正在執行的程式,轉向...

Linux 訊號機制 (二)

推薦一篇好文章 文章二 程序即將從核心態返回使用者態的時候,才會處理訊號 執行訊號處理函式 使用者程序什麼時候從核心態返回使用者態呢?系統呼叫 使用者主動進入核心 中斷 使用者程序被動進入核心 被排程執行 使用者從等待執行,變為正在執行 訊號處理函式時使用者態函式,但是需要在核心態的條件下執行。所以...