![]() |
|
Linux下進程間通信 |
|
本文關鍵字: linux進程間通信,linux 進程通信 通過前面的學習,讀者已經知道了進程是一個程序的一次執行,是系統資源分配的小單元。這里所說的進程一般是指運行在用戶態的進程,而由于處于用戶態的不同進程間是彼此隔離的,就像處于不同城市的人們,他們必須通過某種方式來進行通信,例如人們現在廣泛使用的手機等方式。本章將講述如何建立這些不同的通信方式,就像人們有多種通信方式一樣。 Linux下的進程通信手段基本上是從UNIX平臺上的進程通信手段繼承而來的。而對UNIX發展做出重大貢獻的兩大主力AT&T的貝爾實驗室及BSD(加州大學伯克利分校的伯克利軟件發布中心)在進程間的通信方面的側重點有所不同。前者是對UNIX早期的進程間通信手段進行了系統的改進和擴充,形成了“System V IPC”,其通信進程主要局限在單個計算機內;后者則跳過了該限制,形成了基于套接口(Socket)的進程間通信機制。而Linux則把兩者的優勢都繼承下來,如圖4.1所示。
● UNIX進程間通信(IPC)方式包括管道、FIFO及信號。 ● System V進程間通信(IPC)包括System V消息隊列、System V信號量及System V共享內存區。 ● Posix 進程間通信(IPC)包括Posix消息隊列、Posix信號量及Posix共享內存區。 ● 管道(Pipe)及有名管道(Named Pipe):管道可用于具有親緣關系進程間的通信。有名管道除具有管道所具有的功能外,還允許無親緣關系進程間的通信。 ● 信號(Signal):信號是在軟件層次上對中斷機制的一種模擬,它是比較復雜的通信方式,用于通知進程有某事件發生,一個進程收到一個信號與處理器收到一個中斷請求效果上可以說是一樣的。 ● 消息隊列(Messge Queue):消息隊列是消息的鏈接表,包括Posix消息隊列和System V消息隊列。它克服了前兩種通信方式中信息量有限的缺點,具有寫權限的進程可以按照一定的規則向消息隊列中添加新消息;對消息隊列有讀權限的進程則可以從消息隊列中讀取消息。 ● 共享內存(Shared Memory):可以說這是有效的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據的更新。這種通信方式需要依靠某種同步機制,如互斥鎖和信號量等。 ● 信號量(Semaphore):主要作為進程之間及同一進程的不同線程之間的同步和互斥手段。 ● 套接字(Socket):這是一種更為一般的進程間通信機制,它可用于網絡中不同機器之間的進程間通信,應用非常廣泛。 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈接:
1、實驗:編寫守護進程 |