Linux 程式間通訊的六種機制

Wu_XMing發表於2018-10-12

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

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

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

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

5.訊號量(semaphore):主要作為程式間以及同一程式不同執行緒之間的同步手段。

6.套接字(Socket):更為一般的程式間通訊機制,可用於不同機器之間的程式間通訊。起初是有Unix系統的BSD分支開發出來的,但現在一般可以移植到其他類Unix系統上

相關文章