關於訊號的常用命令:
kill -l:檢視系統中所有的訊號
需要的標頭檔案:
#include
#include
引數原型:int kill(pid_t pid, int sig);
pid:要傳送訊息的程序號
sig:訊號
例如:
kill (pid,signum);
返回值:成功返回0
失敗返回-1
需要的標頭檔案:
#include
引數原型:typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
signum:訊號**(可以指定sigkill和sigstiop以外的所有訊號)
handler:自定義的訊號處理函式指標
sig_ign:忽略該訊號
sig_dfl:採用訊號預設方式處理訊號
例如:void handler(int signum)
printf(「never quit\n」);
}signal(sigint,handler);
接收訊號端:
傳送訊號端:
需要的標頭檔案:
#include
引數原型:int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
signum:訊號**,可以指定除了sigkill和sigstop以外的所以訊號
act:指向結構sigaction的乙個例項的指標,指定對特定訊號的處理
struct sigaction
;sa_handler(代表新的訊號處理方式):是乙個函式指標,指定訊號處理函式,這裡除可以是使用者自定義的處理函式外,還可以為sig_dfl(採用預設的處理方式)或sig_ign(忽略訊號)。它的處理函式只有乙個引數,即訊號值。
sa_mask是乙個訊號集,他可以指定在訊號處理程式執行過程中哪些訊號應當被遮蔽,在呼叫訊號捕獲函式之前,該訊號集要加入到自己訊號的訊號遮蔽字中
sa_flag是乙個選項,主要理解兩個:
sa_interrupt 由此訊號中斷的系統呼叫不會自動重啟
sa_restart 由此訊號中斷的系統呼叫會自動重啟
sa_siginfo 提供附加資訊,乙個指向siginfo結構的指標以及乙個指向程序上下文識別符號的指標
最後乙個引數是乙個替代的訊號處理程式,當設定sa_siginfo時才會用他。
例如: struct sigaction act;
需要的標頭檔案:
#include
引數原型:int sigqueue(pid_t pid, int sig, const union si**al value);
pid:傳送端的程序pid。
sig:引數確定即將傳送的訊號
value:訊號附加資訊,為乙個union si**al聯合體,包括乙個sival_int整型和乙個sival_ptr指標
*union si**al ;
例如: union si**al value;
程序間通訊IPC 訊號
訊號 訊號是程序間唯一的非同步通訊 1 由硬體檢測產生 sigsegv 段錯誤 2 由終端按鍵產生 sigint ctrl c 3 由軟體本身產生 sigpipe 管道 4 由核心傳送 sigio sigurg 5 由其他程序傳送 kill 收到乙個訊號該怎麼處理 1 忽略該訊號 2 按照預設方式處...
程序間通訊IPC 訊號量
訊號量 訊號量 主要來實現程序間或執行緒間的同步 也可以實現互斥 訊號量的值 表示資源的可用量。訊號量操作流程 1 建立乙個訊號量集合 param 2 訊號量集合中訊號量的個數 int semid int semget key t key,int nsems,int sem semid semget...
IPC程序間通訊(訊號量)
訊號量是乙個計數器,用於為多個程序提供對共享資料物件的訪問。訊號量和p v原語操作是由dijkstra 迪傑斯特拉 所提出的。執行p操作時,將該程序狀態設定為等待狀態,並把 該程序的pcb插入相應的等待佇列s.queue末尾 執行v操作時,喚醒相應等待佇列s.queue中等待的乙個程序 改變其狀態為...