進程間的通信(IPC)方式

爲何要進行進程間的通信IPC (Inter-process communication)linux


數據傳輸:一個進程須要將它的數據發送給另外一個進程,發送的數據量在一個字節到幾M字節之間
ide

共享數據:多個進程想要操做共享數據,一個進程對共享數據的修改,別的進程應該馬上看到。函數

通知事件:一個進程須要向另外一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。spa

資源共享:多個進程之間共享一樣的資源。爲了做到這一點,須要內核提供鎖和同步機制。線程

進程控制:有些進程但願徹底控制另外一個進程的執行(如Debug進程),此時控制進程但願可以攔截另外一個進程的全部陷入和異常,並可以及時知道它的狀態改變。設計


linux經常使用的進程間的通信方式接口


(1)管道(pipe):管道可用於具備親緣關係的進程間的通訊,是一種半雙工的方式,數據只能單向流動,容許一個進程和另外一個與它有共同祖先的進程之間進行通訊。隊列


(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,同時除了具備管道的功能外(也是半雙工),它還容許無親緣關係進程間的通訊。命名管道在文件系統中有對應的文件名。命名管道經過命令mkfifo或系統調用mkfifo來建立。進程


(3)信號(signal):信號是比較複雜的通訊方式,用於通知接收進程有某種事件發生了,除了進程間通訊外,進程還能夠發送信號給進程自己;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基於BSD的,BSD爲了實現可靠信號機制,又可以統一對外接口,用sigaction函數從新實現了signal函數)。事件


(4)消息隊列:消息隊列是消息的連接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程能夠向隊列中添加消息,被賦予讀權限的進程則能夠讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺


(5)共享內存:使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式。是針對其餘通訊機制運行效率較低而設計的。每每與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。


(6)內存映射:內存映射容許任何多個進程間通訊,每個使用該機制的進程經過把一個共享的文件映射到本身的進程地址空間來實現它。


(7)信號量(semaphore):主要做爲進程間以及同一進程不一樣線程之間的同步手段。


(8)套接字(Socket):更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。起初是由Unix系統的BSD分支開發出來的,但如今通常能夠移植到其它類Unix系統上:Linux和System V的變種都支持套接字。

相關文章
相關標籤/搜索