進程間通訊簡介


進程間通訊(IPC)是一個涉及一個進程與另一個進程的通訊的機制。 這通常只發生在一個系統中。

通訊可以有兩種型別 -

  • 只從一個進程啟動的相關進程之間,如父進程和子進程。
  • 在不相關的進程之間,或者兩個或多個不同的進程。

在進一步討論此主題之前需要了解的一些重要術語。

管道 - 兩個相關過程之間的通訊。 該機制是半雙工的,意味著只能從第一個進程與第二個進程通訊。 為了實現全雙工,即要對於在第一進程與第二進程之間來回通訊,就需要管道了。

FIFO - 兩個不相關進程之間的通訊。 FIFO是全雙工的,這意味著第一個進程可以與第二個進程進行通訊,反之亦然。

訊息佇列 - 兩個或多個具有全雙工容量的進程之間的通訊。 這些進程將通過發布訊息並將其從佇列中取出來相互通訊。 一旦檢索後,訊息就不再在佇列中可用。

共用記憶體 - 兩個或多個進程之間的通訊是通過所有進程之間共用的記憶體來實現的。 共用記憶體需要通過同步對所有進程的存取來保護彼此。

信號燈 - 信號燈用於同步對多個進程的存取。 當一個進程想要存取記憶體(用於讀取或寫入)時,需要在存取被移除時被鎖定(或保護)並釋放。 這需要所有進程重複以保護資料。

信號 - 信號是通過信號的方式在多個過程之間進行通訊的機制。 這意味著源進程將傳送一個信號(由數位識別),目標進程將相應地處理它。

註 - 本教學中幾乎所有範例程式都基於Linux作業系統下的系統呼叫(在Ubuntu中執行)。