linux進程間通信主要分為以下4個領(lǐng)域
(1)消息傳遞(管道,F(xiàn)IFO,消息隊列)
(2)同步(互斥鎖,條件變量,讀寫鎖,信號量)
(3)共享內(nèi)存區(qū)(匿名共享內(nèi)存區(qū),有名共享內(nèi)存區(qū))
(4)過程調(diào)用(Solaris門,Sun RPC)
linux進程間的信息共享可以分為
(1) 基于文件系統(tǒng)的共享
(2) 基于內(nèi)核的共享
(3) 基于共享內(nèi)存區(qū)的共享
IPC對象的持續(xù)性
(1)隨進程間持續(xù)的IPC對象一直存在到打開著該對象的最后一個進程關(guān)閉該對象的最后一個進程關(guān)閉該對象為止。
(2)隨內(nèi)核持續(xù)的IPC對象一直存在到內(nèi)核重新自舉或顯式刪除該對象為止。
(3)隨文件系統(tǒng)持續(xù)的IPC對象一直存在到顯示刪除該對象為止。即使系統(tǒng)自舉了,該對象還是存在的。
IPC類型 持續(xù)性
管道 隨進程
FIFO 隨進程
Posix互斥鎖 隨進程
Posix條件變量 隨進程
Posix讀寫鎖 隨進程
fcntl記錄上鎖 隨進程
Posix消息隊列 隨內(nèi)核
Posix有名信號量 隨內(nèi)核
Posix基于內(nèi)存的信號量 隨進程
Posix共享內(nèi)存區(qū) 隨內(nèi)核
System V消息隊列 隨內(nèi)核
System V信號量 隨內(nèi)核
System V共享內(nèi)存區(qū) 隨內(nèi)核
TCP套接字 隨進程
UDP套接字 隨進程
Unix域套接字 隨進程
名字空間:
當(dāng)兩個或多個無親緣關(guān)系的進程使用某種類型的IPC對象來彼此交換信息時,該IPC對象必須有一個某種形式的名字或者標(biāo)識符,這樣其中一個進程(往往是服務(wù)器)可以創(chuàng)建該IPC對象,其余進程則可以指定同一個IPC對象。
IPC類型 用于打開或創(chuàng)建IPC的名字空間 IPC打開后的標(biāo)識
管道 沒有名字 描述符
FIFO 路徑名 描述符
Posix互斥鎖 沒有名字 pthread_mutex_t指針
Posix條件變量 沒有名字 pthread_cond_t指針
Posix讀寫鎖 沒有名字 pthread_rwlock_t指針
fcntl記錄上鎖 路徑名 描述符
Posix消息隊列 Posix IPC名字 mqd_t值
Posix有名信號量 Posix IPC名字 sem_t指針
Posix基于內(nèi)存的信號量 沒有名字 sem_t指針
Posix共享內(nèi)存區(qū) Posix IPC名字 描述符
System V消息隊列 key_t鍵 System V IPC標(biāo)識符
System V 信號量 key_t鍵 System V IPC標(biāo)識符
System V共享內(nèi)存區(qū) key_t鍵 System V IPC 標(biāo)識符
門 路徑名 描述符
sun RPC 程序/版本 RPC句柄
TCP套接字 IP地址與TCP 端口 描述符
UDP套接字 IP地址與UDP端口 描述符
Unix域套接字 路徑名 描述符