linux程序通訊 訊號

2021-07-24 06:56:30 字數 2519 閱讀 6187

1.訊號的分類,常用的幾種訊號**?

訊號的分類:

可靠性方面:可靠訊號和不可靠訊號

與時間上的關係:實時訊號與非實時訊號

常見的訊號:

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

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

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

§sigterm:kill 命令發出的訊號

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

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

2.訊號的處理流程和處理方式

處理流程:

處理方式:

當某訊號出現時,將按照下列三種方式中的一種進行處理:

(1)忽略此訊號

大多數訊號都按照這種方式進行處理,但有兩種訊號決不能被忽略,它們是:sigkill\sigstop。

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

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

(2)執行使用者希望的動作

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

(3)執行系統預設動作

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

1. 

訊號的傳送,捕獲,處理如何操作?用什麼函式實現?   

(1)傳送訊號的主要函式有 kill和raise

區別:

kill既可以

向自身傳送訊號,也可以

向其他程序

傳送訊號。與kill函式不同的是,raise函式是

向程序自身

傳送訊號

#include

#include

int kill(pid_t pid, int signo)

int raise(int signo)

kill

的pid引數有四種不同的情況:

(a)pid>0

將訊號傳送給程序id為pid的程序。

(b)pid == 0

將訊號傳送給同組的程序。

(c)pid < 0

將訊號傳送給其程序組id等於pid絕對值的程序。

(d)pid ==-1

將訊號傳送給所有程序。

(2)alarm

使用alarm函式可以設定乙個時間值(鬧鐘時間),當所設定的時間到了時,產生sigalrm訊號.如果不捕捉此訊號,則預設動作是終止該程序

#include

unsigned int alarm(unsigned int seconds)

seconds: 

經過了指定的seconds秒後會產生訊號sigalrm。

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

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

(3)pause

pause

函式使呼叫程序掛起直至捕捉到乙個訊號。

#include

intpause(void)

只有執行了乙個訊號處理函式後,掛起才結束

(4)訊號的處理

當系統捕捉到某個訊號時,可以忽略該訊號或是使用指定的處理函式來處理該訊號,或者使用系統預設的方式

訊號處理的主要方法有兩種;

一種是使用簡單的signal函式,另一種是使用訊號集函式組

#include

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、訊號處理函式名:使用該函式處理

Linux程序通訊 訊號通訊

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

Linux程序通訊 訊號

1.程序 在介紹訊號的概念之前,先簡單的介紹一下程序的概念 程序可以理解為一段正在執行的程式,它包括以下三個部分內容 1 一段正在執行的程式 2 與該段程式相關聯的全部資料 資料空間,記憶體,緩衝區 3 程式計數器 pc 2.訊號 可以這麼理解訊號,訊號本身不是訊息,它表達的內容才是訊息。linux...

Linux 程序通訊 訊號

linux 程序通訊 訊號 模擬 乙個程序收到訊號與乙個處理器收到乙個中斷請求可以說一樣的,訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號是什麼時候到達。常見訊號 sighup 從終端發出的訊號 sigint 來自鍵盤中斷訊號 sigkill 訊號結束接受訊號程序...