Linux 程序之間通訊都有哪些方式

2021-09-25 12:22:31 字數 975 閱讀 2423

通訊手段

簡介管道(pipe)

即有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊;

訊號(signal)

訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式);

message(訊息佇列)

訊息佇列是訊息的鏈結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點

共享記憶體

使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。

訊號量(semaphore)

主要作為程序間以及同一程序不同執行緒之間的同步手段。

套介面(socket)

更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由unix系統的bsd分支開發出來的,但現在一般可以移植到其它類unix系統上:linux和system v的變種都支援套接字。

linux執行緒間通訊:

互斥體,訊號量,條件變數

windows執行緒間通訊:

臨界區(critical section)、互斥量(mutex)、訊號量(semaphore)、事件(event)

windows 程序間通訊:

管道、記憶體共享、訊息佇列、訊號量、socket

windows 程序和執行緒共同之處:

訊號量和訊息(事件)

linux 程序之間 的通訊

在linux程序中有時需要程序之間相互的通訊 mmap 記憶體對映就是其中一種 通過建立檔案對映到磁碟,然後返回乙個指標,這樣就可以對磁碟進行讀取 mmap 系統呼叫使得程序之間通過對映同乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以向訪問普通記憶體一樣對檔案進行訪問,不必再呼...

程序之間通訊

之所以開啟子程序 肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。然而程序記憶體是物理隔離的 1.將共享資料放在檔案中,就是慢 2.管道subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你分配,速度快 from multiprocessi...

程序之間究竟有哪些通訊 方式?如何通訊?

1 管道 我們來看 一條 linux 的語句 netstat tulnp grep 8080 學過 linux 命名的估計都懂這條語句 的含義,其中 是管道的意思,它的作 用就是把前 一條命令的輸出 作為後 一條命令的輸 入。在這 裡 就是把 netstat tulnp 的輸出結果作為 grep 8...