鍍金池/ 教程/ Linux/ 進(jìn)程間通信簡介
命名管道
消息隊(duì)列
進(jìn)程創(chuàng)建與終止
信號(hào)量
進(jìn)程組,會(huì)話和作業(yè)控制
共享內(nèi)存
進(jìn)程間通信簡介
子進(jìn)程監(jiān)視
其他進(jìn)程
覆蓋進(jìn)程映像
進(jìn)程信息
進(jìn)程映像
內(nèi)存映射
相關(guān)系統(tǒng)調(diào)用(System V)
進(jìn)程資源
System V & Posix
信號(hào)
進(jìn)程間通信教程
管道

進(jìn)程間通信簡介

進(jìn)程間通信(IPC)是一個(gè)涉及一個(gè)進(jìn)程與另一個(gè)進(jìn)程的通信的機(jī)制。 這通常只發(fā)生在一個(gè)系統(tǒng)中。

通信可以有兩種類型 -

  • 只從一個(gè)進(jìn)程啟動(dòng)的相關(guān)進(jìn)程之間,如父進(jìn)程和子進(jìn)程。
  • 在不相關(guān)的進(jìn)程之間,或者兩個(gè)或多個(gè)不同的進(jìn)程。

在進(jìn)一步討論此主題之前需要了解的一些重要術(shù)語。

管道 - 兩個(gè)相關(guān)過程之間的通信。 該機(jī)制是半雙工的,意味著只能從第一個(gè)進(jìn)程與第二個(gè)進(jìn)程通信。 為了實(shí)現(xiàn)全雙工,即要對于在第一進(jìn)程與第二進(jìn)程之間來回通信,就需要管道了。

FIFO - 兩個(gè)不相關(guān)進(jìn)程之間的通信。 FIFO是全雙工的,這意味著第一個(gè)進(jìn)程可以與第二個(gè)進(jìn)程進(jìn)行通信,反之亦然。

消息隊(duì)列 - 兩個(gè)或多個(gè)具有全雙工容量的進(jìn)程之間的通信。 這些進(jìn)程將通過發(fā)布消息并將其從隊(duì)列中取出來相互通信。 一旦檢索后,消息就不再在隊(duì)列中可用。

共享內(nèi)存 - 兩個(gè)或多個(gè)進(jìn)程之間的通信是通過所有進(jìn)程之間共享的內(nèi)存來實(shí)現(xiàn)的。 共享內(nèi)存需要通過同步對所有進(jìn)程的訪問來保護(hù)彼此。

信號(hào)燈 - 信號(hào)燈用于同步對多個(gè)進(jìn)程的訪問。 當(dāng)一個(gè)進(jìn)程想要訪問內(nèi)存(用于讀取或?qū)懭?時(shí),需要在訪問被移除時(shí)被鎖定(或保護(hù))并釋放。 這需要所有進(jìn)程重復(fù)以保護(hù)數(shù)據(jù)。

信號(hào) - 信號(hào)是通過信號(hào)的方式在多個(gè)過程之間進(jìn)行通信的機(jī)制。 這意味著源進(jìn)程將發(fā)送一個(gè)信號(hào)(由數(shù)字識(shí)別),目標(biāo)進(jìn)程將相應(yīng)地處理它。

注 - 本教程中幾乎所有示例程序都基于Linux操作系統(tǒng)下的系統(tǒng)調(diào)用(在Ubuntu中執(zhí)行)。