與訊號相關的linux系統程式設計API

2021-07-22 11:40:39 字數 1305 閱讀 2630

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...