程序間通訊(IPC) 訊號

2021-10-12 16:37:35 字數 2170 閱讀 6909

關於訊號的常用命令:

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中等待的乙個程序 改變其狀態為...