進程間通信簡介

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

通信可以有兩種類型 -

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

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

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

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

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

共享內存 - 兩個或多個進程之間的通信是通過所有進程之間共享的內存來實現的。 共享內存需要通過同步對所有進程的訪問來保護彼此。

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

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

注 - 本教程中幾乎所有示例程序都基於Linux操作系統下的系統調用(在Ubuntu中執行)。