訊號是軟體中斷。很多比較重要的應用程式都需要處理訊號。訊號提供了一種處理非同步事件的方法。每個訊號都有乙個名字,並且他們的名字都是以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 終端中斷。如果程序接收到這些訊號中的乙個,但是...