程序間的 訊號 通訊

2021-07-25 13:43:54 字數 2062 閱讀 8545

首先注意:

這裡是程序間的訊號通訊(signal),不是訊號量通訊(semaphore)

linux系統支援的所有訊號均定義在/usr/include/asm/signal.h,其中常見的訊號有:

-sigkill: 殺死程序

-sigstop:暫停程序

-sigchld:子程序停止或結束時用來通知父程序

函式原形:

intkill(pid_t pid, int sig);

函式功能:傳送訊號給程序或程序組。

所屬標頭檔案:

#include 

#include

返回值:

若成功,返回0;若失敗,返回-1.

引數說明:

pid

大於0:pid指向接收訊號的程序

等於0:訊號被傳送給所呼叫程序所在的程序組的所有程序。

等於-1:訊號被傳送給允許本程序傳送訊號的所有程序。

小於-1:訊號被傳送給程序組的所有-pid程序。

sig:指明要傳送的訊號,若等於0,則無訊號傳送。

函式原形:

//下面是乙個函式指標,有乙個int型別的引數

typedef void (*sighandler_t)(int);

sighandler_tsignal(int signum, sighandler_t handler);

函式功能:設定訊號的處理方式。

所屬標頭檔案:

#include
返回值:

若成功,返回前乙個處理函式的指標;若失敗,返回sig_err。

引數說明:

signum:要處理的訊號

handler:對應訊號的處理方式,有如下三種取值:

sig_ign:忽略訊號,不處理。

sig_dfl:採用預設方式,交給核心處理。

使用者自定義的函式:交給使用者定義的函式來處理。

函式原形:

intpause(void);

函式功能:

程序等待,直到訊號的到來。

所屬標頭檔案:

#include
返回值:

只有捕捉到訊號,並且訊號處理函式返回時,返回-1

1、傳送訊號的程序

/* ab兩個程序實現訊號通訊,a程序的** */

#include

#include

#include

/* a程序 向 b程序 傳送 乙個叫 sigint 的訊號*/

void main(int argc, char *argv)

2、接收訊號的程序

/* ab兩個程序實現訊號通訊,b程序的** */

#include

#include

#include

/* a程序 向 b程序 傳送 乙個叫 sigint 的訊號*/

void myfunc(int a)

void main()

程序間通訊 訊號

關於訊號在程序間的通訊,這是乙個比較複雜的東西,本人不在這裡做過多的介紹.如果想系統的學習,請參考 unix環境高階程式設計這本書 我在這裡只展示幾個例子 用守護程序實現檔案的同步.由子程序1改乙個檔案,守護程序2,檢查到檔案已經改變,並通過訊號告訴給父程序,父程序實現輸出.程式有點複雜,但思路還是...

程序間通訊(訊號)

linux系統程序間通訊有很多種方式 較多使用的有訊號,管道以及system vipc。各種通訊方式各有優缺點。這部分主要就程序間通訊方式進行總結。1 訊號。訊號進行程序間通訊方式有一點需要明確 訊號只能通知,不能在程序間共享資料資源。也就是說訊號僅僅是告訴你一下某個事情發生了。而我們的程式則可以對...

程序間通訊 訊號

訊號 概念 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊方式,用於通知程序有某事件發生,乙個程序收到乙個訊號與處理器收到乙個中斷請求效果上可以說是一致的。程序在接收到這個訊號以後,可以設定響應的處理動作 忽略或者呼叫函式進行處理。在linux下命令列 kill l 可以檢視linux下...