linux處理序間通訊概述

來源:互聯網
上載者:User

linux處理序間通訊(IPC)有幾種方式,下面將將簡單的簡述一下:

 

一.管道(pipe)

管道是Linux支援的最初IPC方式,管道可分為無名管道,有名管道等。

(一)無名管道,它具有幾個特點:

1)  管道是半雙工的,只能支援資料的單向流動;兩進程間需要通訊時需要建立起兩個管道;

2)  無名管道使用pipe()函數建立,只能用於父子進程或者兄弟進程之間;

3)  管道對於通訊的兩端進程而言,實質上是一種獨立的檔案,只存在於記憶體中;

4)  資料的讀寫操作:一個進程向管道中寫資料,所寫的資料添加在管道緩衝區的尾部;另一個進程在管道中緩衝區的頭部讀資料。

 

(二)有名管道

有名管道也是半雙工的,不過它允許沒有親緣關係的進程間進行通訊。具體點說就是,有名管道提供了一個路徑名與之進行關聯,以FIFO(先進先出)的形式存在於檔案系統中。這樣即使是不相干的進程也可以通過FIFO相互連信,只要他們能訪問已經提供的路徑。

值得注意的是,只有在管道有讀端時,往管道中寫資料才有意義。否則,向管道寫資料的進程會接收到核心發出來的SIGPIPE訊號;應用程式可以自訂該訊號處理函數,或者直接忽略該訊號。

 

二.訊號量(semophore)

訊號量是一種計數器,可以控制進程間多個線程或者多個進程對資源的同步訪問,它常實現為一種鎖機制。實質上,訊號量是一個被保護的變數,並且只能通過初始化和兩個標準的原子操作(P/V)來訪問。(P,V操作也常稱為wait(s),signal(s))

 

三.訊號(Signal)

訊號是Unix系統中使用的最古老的處理序間通訊的方法之一。作業系統通過訊號來通知某一進程發生了某一種預定好的事件;接收到訊號的進程可以選擇不同的方式處理該訊號,一是可以採用預設處理機制—進程中斷或退出,一是忽略該訊號,還有就是自訂該訊號的處理函數,執行相應的動作。

核心為進程生產訊號,來響應不同的事件,這些事件就是訊號源。訊號源可以是:異常,其他進程,終端的中斷(Ctrl-C,Ctrl+\等),作業的控制(前台,後台進程的管理等),分配額問題(cpu逾時或檔案過大等),核心通知(例如I/O就緒等),警示(計時器)。

 

四.訊息佇列(Message Queue)

訊息佇列就是訊息的一個鏈表,它允許一個或者多個進程向它寫訊息,一個或多個進程向它讀訊息。Linux維護了一個訊息佇列向量表:msgque,來表示系統中所有的訊息佇列。

訊息佇列克服了訊號傳遞資訊少,管道只能支援無格式位元組流和緩衝區受限的缺點。

 

五.共用記憶體(shared memory)

共用記憶體映射為一段可以被其他進程訪問的記憶體。該共用記憶體由一個進程所建立,然後其他進程可以掛載到該共用記憶體中。共用記憶體是最快的IPC機制,但由於linux本身不能實現對其同步控制,需要使用者程式進行並發存取控制,因此它一般結合了其他通訊機制實現了進程間的通訊,例如訊號量。

 

六.通訊端(socket)

socket也是一種進程間的通訊機制,不過它與其他通訊方式主要的區別是:它可以實現不同主機間的進程通訊。一個套介面可以看做是處理序間通訊的端點(endpoint),每個套介面的名字是唯一的;其他進程可以訪問,串連和進行資料通訊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.