程序間通訊之訊號

2021-08-18 06:16:20 字數 4115 閱讀 3241

訊號是軟體中斷。很多比較重要的應用程式都需要處理訊號。訊號提供了一種處理非同步事件的方法。每個訊號都有乙個名字,並且他們的名字都是以sig開頭的。

訊號的處理或相關動作有三種處理方式:

1、預設訊號(sig_dfl)

2、忽略訊號(sig_ign):大多數訊號可採用,除sigkill和sigstop外。

3、自定義訊號(function):自定義訊號是將原來的訊號被使用者通過乙個自定義函式修改為使用者想要執行某種功能的訊號。

訊號的使用一般通過乙個signal函式來實現。它的原型為:

void (*signal(int signo, void (*func)(int)))(int);

若呼叫成功則返回訊號以前的處理配置,若出錯則返回sig_err。

第乙個引數為乙個整數(因為訊號都通過巨集定義為乙個整數,所以訊號就是乙個整數)。第二個引數為函式指標,指向乙個無返回值且只有乙個整形引數的函式首位址(該函式的功能主要是修改訊號為使用者想要實現的訊號或功能,整形引數就是要被修改的訊號)。

下面就是實現乙個訊號的具體使用方法:

#include

#include

#include

#include

#include

#include

#include

#include

int count = 0;

void fun(int sign)

printf("hello world!\n");

}

void main()

}

此段**的功能為前三次按ctrl+c每次都會列印乙個「hello world!」,第四次再按則程序就結束了(ctrl+c 為終止訊號相當於sigint)。起實質就是將終止訊號改變為乙個列印功能,當滿足一定條件後再將其改回來終止程序。

訊號有很多,我們接觸到的大約就以下訊號:

sighup     終止程序     終端線路結束通話

sigint     終止程序     中斷程序

sigquit   建立core檔案終止程序,並且生成core檔案

sigill   建立core檔案       非法指令

sigtrap   建立core檔案       跟蹤自陷

sigbus   建立core檔案       匯流排錯誤

sigsegv   建立core檔案       段非法錯誤

sigfpe   建立core檔案       浮點異常

sigiot   建立core檔案       執行i/o自陷

sigkill   終止程序     殺死程序

sigpipe   終止程序     向乙個沒有讀程序的管道寫資料

sigalarm   終止程序     計時器到時

sigterm   終止程序     軟體終止訊號

sigstop   停止程序     非終端來的停止訊號

sigtstp   停止程序     終端來的停止訊號

sigcont   忽略訊號     繼續執行乙個停止的程序

sigurg   忽略訊號     i/o緊急訊號

sigio     忽略訊號     描述符上可以進行i/o

sigchld   忽略訊號     當子程序停止或退出時通知父程序

sigttou   停止程序     後台程序寫終端

sigttin   停止程序     後台程序讀終端

sigxgpu   終止程序     cpu時限超時

sigxfsz   終止程序     檔案長度過長

sigwinch   忽略訊號     視窗大小發生變化

sigprof   終止程序     統計分布圖用計時器到時

sigusr1   終止程序     使用者定義訊號1

sigusr2   終止程序     使用者定義訊號2

sigvtalrm 終止程序     虛擬計時器到時

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 訊號的...

程序間的通訊之訊號

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