程序通訊 訊號

2021-07-24 02:41:02 字數 2242 閱讀 5795

程序通訊—訊號

產生訊號的條件

1、當使用者按某些按鍵時,產生訊號

2、硬體異常產生訊號:除數為0、無效的儲存訪問等等。這些情況通常由硬體檢測到,將其通知核心,然後核心產生適當的訊號通知程序,例如,核心對正訪問乙個無效儲存區的程序產生乙個sigsegv訊號

3、程序用kill函式將訊號傳送給另乙個程序

4、使用者可用kill命令將訊號傳送給其他程序

下面是幾種常見的訊號:

sighup: 從終端上發出的結束訊號

sigint: 來自鍵盤的中斷訊號(ctrl-c)

sigkill:該訊號結束接收訊號的程序,殺死程序

sigterm:kill 命令發出的訊號

sigchld:子程序停止或結束時通知父程序

sigstop:來自鍵盤(ctrl-z)或除錯程式的停止執行訊號,暫停程序

處理訊號的三種方式

1、忽略此訊號

大多數訊號都按照這種方式進行處理,但有兩種訊號

決不能被忽略,它們是:

sigkill\sigstop。

這兩種訊號不能被忽略的原因是:

它們向超級使用者提供了一種終止或停止程序的方法

2、執行使用者希望的動作

通知核心在某種訊號發生時,呼叫乙個使用者函式。在使用者函式中,執行使用者希望的處理

3、執行系統預設動作

對大多數訊號的系統預設動作是終止該程序

函式kill

函式功能:傳送訊號給指定程序

函式原型:int kill(pid_t pid,int sig);

函式引數:pid:程序號 sig:訊號

返回值 :>0:將訊號傳送給程序號為pid的程序

=0:將訊號傳送給與當前程序相同程序組的所有程序

-1:將訊號廣播給系統內所有的程序

<0:將訊號傳送給與pid絕對值相同的程序

引數 :成功:0,;出錯:-1

標頭檔案 :

#include

#include

函式raise

函式功能:傳送訊號給本程序

函式原型:int raise(int signo);

函式引數:signo :訊號

返回值 :成功:0失敗:-1

標頭檔案 :

#include 

#include

函式alarm

函式功能:設定訊號傳送鬧鐘

函式原型:unsigned int alarm(unsigned int seconds);

函式引數:seconds經過了指定的seconds秒後會產生訊號sigalrm。

返回值 :返回之前鬧鐘的剩餘秒數,如果之前未鬧鐘則返回0

標頭檔案 :

#include
注意:

每個程序只能有乙個鬧鐘時間.如果在呼叫alarm時,以前已為該程序設定過鬧鐘時間,而且它還沒有超時,以前登記的鬧鐘時間則被新值代換

如果有以前登記的尚未超過的鬧鐘時間,而這次seconds值是0,則表示取消以前的鬧鐘

函式pause

函式功能:讓程序暫停直到訊號出現

函式原型:int pause(void);

返回值 :-1

標頭檔案 :

#include
函式signal

函式功能:設定訊號處理方式

函式原型:void (signal (int signo, void ( sighandler_t)(int)))(int);

typedef void (*sighandler_t)(int) sighandler_t;

signal(int signum, sighandler_t handler));

函式引數:func可能的值是:

1、sig_ign:忽略此訊號

2、sig_dfl: 按系統預設方式處理

3、訊號處理函式名:使用該函式處理

標頭檔案 :#include

#include 

#include

#include

/*自定義訊號處理函式*/

void my_func(int sign_no)

int main()

程序通訊 訊號

訊號是程序間通訊機制中唯一的非同步通訊機制。訊號的分類 根據可靠性 可靠訊號 不可靠訊號 根據與時間的關係 實時訊號 非實時訊號 程序可以通過下面三種方式來處理乙個訊號 1.忽略訊號 大多數訊號都按照這種方式進行處理,但有兩種訊號決不能被忽略,它們是 sigkill sigstop。這兩種訊號不能被...

Linux程序通訊 訊號通訊

訊號 signal 機制是unix系統中最為古老的程序間通訊機制,很多條件可以產生乙個訊號 1 當使用者按某些按鍵時,產生訊號 2 硬體異常產生訊號 除數為0 無效的儲存訪問等等。這些情況通常由硬體檢測到,將其通知核心,然後核心產生適當的訊號通知程序,例如 核心對正訪問乙個無效儲存區的程序產生乙個s...

程序間通訊 訊號

關於訊號在程序間的通訊,這是乙個比較複雜的東西,本人不在這裡做過多的介紹.如果想系統的學習,請參考 unix環境高階程式設計這本書 我在這裡只展示幾個例子 用守護程序實現檔案的同步.由子程序1改乙個檔案,守護程序2,檢查到檔案已經改變,並通過訊號告訴給父程序,父程序實現輸出.程式有點複雜,但思路還是...