linux下的進程通信手段基本上是從Unix平臺上的進程通信手段繼承而來的。
而對Unix發展做出重大貢獻的兩大主力AT&T的貝爾實驗室及BSD(加州大學伯克利分校的伯克利軟件發布中心)在進程間通信方面的側重點有所不同。
前者對Unix早期的進程間通信手段進行了系統的改進和擴充,形成了“system V IPC”,通信進程局限在單個計算機內;
后者則跳過了該限制,形成了基于套接口(socket)的進程間通信機制。
Linux則把兩者繼承了下來,如圖示:

最初Unix IPC包括:管道、FIFO、信號;
System V IPC包括:System V消息隊列、System V信號燈、System V共享內存區;
Posix IPC包括: Posix消息隊列、Posix信號燈、Posix共享內存區。
有兩點需要簡單說明一下:
1)由于Unix版本的多樣性,電子電氣工程協會(IEEE)開發了一個獨立的Unix標準,這個新的ANSI Unix標準被稱為計算機環境的可移植性操作系統界面(PSOIX)。
現有大部分Unix和流行版本都是遵循POSIX標準的,而Linux從一開始就遵循POSIX標準;
2)BSD并不是沒有涉足單機內的進程間通信(socket本身就可以用于單機內的進程間通信)。
事實上,很多Unix版本的單機IPC留有BSD的痕跡,如4.4BSD支持的匿名內存映射、4.3+BSD對可靠信號語義的實現等等。
圖一給出了linux 所支持的各種IPC手段,在本文接下來的討論中,為了避免概念上的混淆,在盡可能少提及Unix的各個版本的情況下,所有問題的討論最終都會歸結到Linux環境下的進程間通信上來。
并且,對于Linux所支持通信手段的不同實現版本(如對于共享內存來說,有Posix共享內存區以及System V共享內存區兩個實現版本),將主要介紹Posix API。
linux進程間通信的幾種主要手段簡介-------------------------------------------------------------------------------------------------------------------------------------------------------------
參考資料:
http://www.ibm.com/developerworks/cn/linux/l-ipc/
新聞熱點
疑難解答