進程間的通訊方式
進程間通訊,即進程之間傳播或者交換信息。在系統中,進程的用戶空間都是相對獨立的,一般來說不能相互訪問,要實現進程之間的通信,總體上,有以下幾種方式:
- 管道 ( pipe )
- 系統IPC ( 消息隊列、信號、共享傳輸)
- 套接字 ( Socket )
管道
- 普通管道(pipe)
- 數據只能單向傳輸
- 只能在有親緣關係的進程間使用
- 可以看作一種只存在於內存中的特殊的文件 允許通過普通的 write()、read() 等函數來讀寫
- 流管道 (s_pipe)
- 在普通管道的基礎之上 允許雙向傳輸
- 命名管道(name_pipe)
- 能在不相關進程間通訊 但是不能雙向傳輸
- 以 FIFO 的方式存在於文件系統中
- 總是以 first in first out 的方式進行數據讀取
系統IPC
- 信號
- 生命週期-生成與傳送
- 信號到來到進程對信號處理之間 信號在進程上掛起
- 內核爲進程生產信號來響應不同的事件 並用一個字來代表信號 每個信號佔一位 因此一個字的位數就是系統可以支持的最多信號種類數
- 信號沒有固定的優先級
- 消息隊列 - 消息的鏈表
- 存放在內核中 並由消息隊列標識符表示
- 克服了信號傳遞信息少
- 管道只能承載無格式字節流以及緩衝區大小受限等特點
- 共享內存 - 映射一段能被其他進程訪問的內存
- 由一個進程創建
- 是最快的IPC通信方式 針對其他進程間通信方式運行效率低二設計 可與其他通信機制配合使用
套接字(Socket)
可用於不同進程及其間進程的通信