【Qt】Qt之進程間通訊(IPC)【轉】

簡述

進程間通訊,就是在不一樣進程之間傳播或交換信息。那麼不一樣進程之間存在着什麼雙方均可以訪問的介質呢?進程的用戶空間是互相獨立的,通常而言是不能互相訪問的,惟一的例外是共享內存區。可是,系統空間倒是「公共場所」,因此內核顯然能夠提供這樣的條件。除此之外,那就是雙方均可以訪問的外設了。在這個意義上,兩個進程固然也能夠經過磁盤上的普通文件交換信息,或者經過「註冊表」或其它數據庫中的某些表項和記錄交換信息。廣義上這也是進程間通訊的手段,可是通常都不把這算做「進程間通訊」。程序員

進程間通訊(IPC-Interprocess communication)是一組編程接口,可以讓程序員協調不一樣的進程,使之能在一個操做系統裏同時運行。這使得一個程序可以在同一時間裏處理許多用戶的要求。由於即便只有一個用戶發出要求,也可能致使一個操做系統中多個進程的運行,進程之間必須互相通話。IPC接口就提供了這種可能性。每一個IPC方法均有本身的優勢和侷限性,所以,對於單個程序而言使用全部的IPC方法並不常見。數據庫

通訊目的

  • 數據傳輸:
    一個進程須要將它的數據發送給另外一個進程,發送的數據量在一個字節到幾兆字節之間。編程

  • 共享數據:
    多個進程想要操做共享數據,一個進程對共享數據的修改,別的進程應該馬上看到。安全

  • 通知事件:
    一個進程須要向另外一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。markdown

  • 資源共享:
    多個進程之間共享一樣的資源。爲了做到這一點,須要內核提供鎖和同步機制。網絡

  • 進程控制:
    有些進程但願徹底控制另外一個進程的執行(如Debug進程),此時控制進程但願可以攔截另外一個進程的全部陷入和異常,並可以及時知道它的狀態改變。session

進程經過與內核及其它進程之間的互相通訊來協調它們的行爲。Linux支持多種進程間通訊(IPC)機制,信號和管道是其中的兩種。socket

通訊方式

  • 管道( pipe ):
    管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。進程的親緣關係一般是指父子進程關係。tcp

  • 有名管道 (named pipe) :
    有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。操作系統

  • 信號量(semophore) :
    信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其它進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。

  • 消息隊列(message queue) :
    消息隊列就是消息的一個鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。

  • 信號 (signal) :
    信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。

  • 共享內存(shared memory) :
    共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號兩,配合使用,來實現進程間的同步和通訊。

  • 套接字(socket) :
    套接字也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。

Qt進程通訊

在Qt應用程序中,Qt提供了幾個方法來實現進程間通訊(IPC)。能夠在助手中查找關鍵字」Inter-Process」進行查找。

TCP/IP

跨平臺的Qt Network模塊提供的類可讓網絡編程更加便攜和方便。它提供了高級類(例如:QNetworkAccessManager、QFtp)通訊,使用特定的應用程序級協議,和較底層的類(例如:QTcpSocket、QTcpServer、QSslSocket)用於實現協議。

Shared Memory

跨平臺的QSharedMemory-共享內存類,提供對操做系統的共享內存的實現。它容許多個線程和進程安全訪問共享內存段。此外,QSystemSemaphore能夠用來控制訪問由系統共享的資源,以及進程之間的通訊。

D-Bus

Qt的D-Bus模塊是一種可用於使用D-Bus協議實現IPC的惟一Unix庫。它將Qt的信號和槽機制延伸到IPC級別,容許由一個進程發出的信號被鏈接到另外一個進程的槽。Qt的D-Bus文檔已經詳細說明如何使用Qt中的D-Bus模塊。

QProcess

跨平臺類QProcess能夠用於啓動外部程序做爲子進程,並與它們進行通訊。它提供了用於監測和控制該子進程狀態的API。另外,QProcess爲從QIODevice繼承的子進程提供了輸入/輸出通道。

Session Management

在Linux/X11平臺上,Qt提供了會話管理的支持。會話容許事件傳播到進程,例如,當檢測到關機時。進程和應用程序能夠執行任何須要的操做,例如:保存打開的文檔。


原文做者:一去丶二三裏
做者博客:去做者博客空間
相關文章
相關標籤/搜索