1. 程式人生 > >Linux進程間的通信方法簡介

Linux進程間的通信方法簡介

進程通信 linux

一、本地進程間的通信方式:

1.管道(pipe)

利用管道文件可以進行進程間數據的通信,通常是具有血緣關系的父子進程間的通信方式。

管道通信為半雙工模式,父子進程可以通過調用內核中的read()和write()命令來向管道文件進行讀寫操作。

管道通信是基於硬盤內的文件,所以I/O速度較低。


2.消息隊列

消息隊列是一種類似鏈表的數據結構,存放於內存中,因此I/O速度較管道更快,通過ipcs -q命令可以查看當前系統中被創建的消息隊列。

多個不同進程可以使用同一個消息隊列進行通信,消息隊列中的數據是以塊存放,每塊數據有特定的mtype,進程在發送和接收數據的時候必須指定特定的mtype。


3.信號量

用於處理進程的同步和互斥:

同步:嚴格安排進程執行的先後順序

互斥:兩個進程不可以同時使用同一資源(代碼段),可以說是特殊的同步

信號量可以理解為一個計數器,當有進程申請使用信號量時,將其計數-1(P操作),當計數器為0時表示此時沒有資源,其他進程要訪問必須等待,當一個進程使用完畢資源時,將其計數+1(V操作)。


4.共享內存

類似消息隊列,但操作更為簡潔,通過ipcs -m命令可以查看當前系統中被創建的共享內存區。

進程想使用共享內存區時,需要先創建對該共享內存的鏈接。


二、不同主機進程間的通信(網絡通信)

通過兩臺主機的一對套接字來進行通信,套接字由ip地址和端口號組成,一個套接字標識特定主機的特定進程。

服務器進程創建套接字,將其設置監聽狀態,這種進程稱為守護進程。

之後客戶端創建用於請求鏈接的套接字,對服務器處於監聽狀態的套接字發出鏈接請求,從而建立鏈接。



Linux進程間的通信方法簡介