1. kill(pid_t pid, int sig); //給指定的程序傳送sig訊號
raise(int sig); //給當前程序傳送sig訊號
2. 處理指定的訊號
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t
handler);
//使用新的處理函式handler來處理signum訊號, 並返回原來的處理函式位址
檢視訊號: man 7 signal
3. sigchld訊號, 當子程序退出時會向父程序傳送sigchld訊號
4. 訊號集合操作
int sigemptyset(sigset_t *set); //清空訊號集合set
int sigfillset(sigset_t *set);//把所有訊號填入到set裡
int sigaddset(sigset_t *set, int signum);//把訊號signum加入到set裡
int sigdelset(sigset_t *set, int signum);//把訊號signum從set裡移除
int sigismember(const sigset_t *set, int signum); //檢查訊號signum是否存在set裡
5. int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
how有三個型別
sig_block 設當前程序的堵塞住的訊號+= set裡指定的訊號
sig_uncblock 設當前程序的堵塞住的訊號-=set裡指定的訊號
sig_setmask 堵塞的訊號=set裡指定的訊號
6. sigaction 訊號處理
int sigaction(int signum, const struct sigaction
*act, struct sigaction *oldact);
struct sigaction
sa_handler和sa_sigaction只能二選一, 當使用sa_sigaction時, sa_falgs為sa_siginfo, 否則為0;
sa_mask設定在訊號處理函式執行期間堵塞住哪些訊號
sigqueue可給指定的程序傳送指定的訊號, 並可附帶引數. 只能使用sa_sigaction處理函式才能接收
int sigqueue(pid_t pid, int sig, const union
sigval value);
Linux系統程式設計 訊號
0x00 訊號和中斷類似,中斷是硬體發出,而訊號由軟體發出。訊號常用於程序間通訊,乙個訊號常見的處理如下 1 設定對應訊號的訊號處理函式。2 當訊號來臨時,打斷正常執行的程式 本質上是在系統呼叫前檢查是否有訊號的到來 去執行訊號處理函式。3 訊號處理函式執行完,繼續執行原程式。0x01 我們先來看一...
Linux系統程式設計 訊號
基本概念 訊號的狀態 產生未決狀態 沒有被處理的 遞達 已經被處理的 訊號的優先順序比較高 程序收到訊號之後,暫停正在處理的工作 訊號集 kill 發射訊號給某個程序 raise 自己給自己發訊號 函式原型 int raise int sig abort 給自己傳送異常終止的訊號 alarm 設定定...
Linux系統程式設計 訊號
訊號的共性 1.簡單 2.不能攜帶大量資訊 3.滿足特定條件才能傳送 訊號的機制 1.訊號是軟體層面的中斷。一旦訊號產生,無論程式執行到什麼位置都必須結束 2.所有訊號的產生以及處理都是核心產生.訊號的產生 1.按鍵產生 程ctrl c ctrl v 2.系統呼叫產生 kill函式 3.定時器 al...