進程間通信又叫IPC (InterProcess Communication)是指在不同進程之間傳播或交換信息。IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket。 Socket支持不同主機上的兩個進程IPC。

1,管道分為命名管道和無名管道,在內核中申請一塊固定大小的緩沖區,程序擁有寫入和讀取的權利,都可以看成一種特殊的文件,具有固定的讀端和寫端,也可以使用普通的read、write 等函數。但是它不是普通的文件,并不屬于其他任何文件系統,并且只存在于內存中;無名管道一般使用fork函數實現父子進程的通信,命名管道用于沒有血緣關系的進程也可以進程間通信;面向字節流、自帶同步互斥機制、半雙工,單向通信,兩個管道實現雙向通信。
2,消息隊列,在內核中創建一隊列,隊列中每個元素是一個數據報,不同的進程可以通過句柄去訪問這個隊列;消息隊列獨立于發送與接收進程,可以通過順序和消息類型讀取,也可以fifo讀?。幌㈥犃锌蓪崿F雙向通信。
3,信號量 , 在內核中創建一個信號量集合(本質是個數組),數組的元素(信號量)都是1,使用P操作進行-1,使用V操作+1,通過對臨界資源進行保護實現多進程的同步
4,共享內存,將同一塊物理內存一塊映射到不同的進程的虛擬地址空間中,實現不同進程間對同一資源的共享。目前最快的IPC形式,不用從用戶態到內核態的頻繁切換和拷貝數據,直接從內存中讀取就可以,共享內存是臨界資源,所以需要操作時必須要保證原子性。使用信號量或者互斥鎖都可以。
5,socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口,把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據。socket起源于UNIX,在Unix一切皆文件哲學的思想下,socket是一種”打開—讀/寫—關閉”模式的實現,服務器和客戶端各自維護一個”文件”,在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。是一種可以網間通信的方式。