Linux環境程序間通訊 訊號與管道

2022-02-09 00:43:58 字數 1569 閱讀 1068

一、訊號:

訊號主要用來通知程序非同步事件的發生。可以使用「kill -l 」命令來顯示系統中的訊號。程序可以忽略大部分訊號,但是有兩個是不能忽略的:

(1)sigstop:這個訊號將中斷程序的執行。

(2)sigkill:這個訊號將強制程序退出。

linux使用了堆疊來管理要執行的訊號處理程式,這樣當乙個訊號處理程式完成操作時,下乙個將被呼叫,依次下去。

當程序收到訊號後,怎麼處理這個訊號多半是由收到訊號的那個程序自行決定,除非收到的訊號是sigkill之類只能採取預設行動的訊號。linux處理訊號主要有下面4種方式:

(1)採用系統預設的處理方式。一般而言,程序對訊號的預設處理方式都是終止執行。

(2)忽略該訊號。

(3)暫時擱置該訊號。

(4)由程式設計人員利用系統呼叫signal設定處理訊號的函式。以下是乙個例子:

/*

* signalhandler.ci

* * created on: aug 4, 2013

* author: root */

#include

#include

void initfunc(int

signum);

void exitfunc(int

signum);

intmain()

if(signal(sigtstp, &initfunc) == -1

)

if(signal(sigterm, &exitfunc) == -1

) printf(

"pid of this process: %d\n

", getpid());

for(;;)

else

}printf(

"your input is: %s\n

", buffer2);

}exit(0);

}void initfunc(int

signum)

void exitfunc(int

signum)

程式的執行結果如下:

注:在乙個終端中執行該程式時,按下ctrl+z, 會列印catch signal 20;按下ctrl+c,會列印catch signal 2;在終端的另乙個視窗中輸入kill 2457,程式會列印signal sigterm,然後退出。

二、管道

管道,就是將乙個程序的標準輸出和另乙個程序的標準輸入聯絡到一起,以供兩個程序相互通訊的方法。管道是unix中最古老的程序通訊機制,linux中也提供了管道。它的應用非常廣泛,就連linux命令列中也有使用,例如:

這條命令中,ls的輸出作為sort的輸入,sort的輸出又作為head -5的輸入,head -5的輸出將出現在螢幕上。這條命令的最終執行結果是將檔案列表排序,但只輸出前五行。從中可以直觀地看到管道的特點。

Linux 程序間通訊 訊號

訊號是在軟體層次上對中斷機制的一種模擬,在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的。訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。訊號是程序間通訊機制中唯一的非同步通訊機制,可以看作是非同步通知,通知接收訊號的程序有哪些...

Linux程序間通訊 訊號

1.什麼是訊號 訊號是linux系統響應某些條件而產生的乙個事件,接收到該訊號的程序會執行相應的操作。2.訊號的產生 1 由硬體產生,如從鍵盤輸入ctrl c可以終止當前程序 2 由其他程序傳送,如可在shell程序下,使用命令 kill 訊號標號 pid,向指定程序傳送訊號。3 異常,程序異常時會...

Linux程序間通訊 訊號

訊號 signals 是unix 類unix以及其他posix相容的作業系統中程序間通訊的一種有限制的方式。它是一種非同步的通知機制,用來提醒程序乙個事件已經發生。當乙個訊號傳送給乙個程序,作業系統中斷了程序正常的控制流程,此時,任何非原子操作都將被中斷。如果程序定義了訊號的處理函式,那麼它將被執行...