2009-11-18 41 views
1

我們正在準備一個使用Qt的應用程序,該應用程序具有一個控制GUI的主進程並生成進行實際數據處理的進程。使用Qt機制和stdin/stdout管道在主進程和數據處理進程之間交換消息。重新連接到QT中的孤立進程

現在,如果GUI崩潰,其他進程繼續運行。我們希望能夠做的是,當新的GUI啓動時,像以前一樣重新連接到這些進程。任何人都知道這是否可能,如果是的話,如何實現它?

回答

1

如果您使用named pipe與流程進行通信,則可以這樣做。如果它們所屬的進程終止,stdin/out將被關閉。

+0

除了QProcess類對象在內部處理stdin/stdout/stderr管道。爲了使用「命名管道」,QProcess類將不得不被修改,我寧願避免。 – 2009-11-19 17:24:18

+0

您沒有說明您需要使用QProcess。在這種情況下,通過QProcess使用GUI應用程序創建代理進程。只要您的GUI應用程序,代理就會保持。它使用QProcess :: read()/ write()與您的GUI進行通信。此代理創建命名管道並啓動輔助進程並將管道連接到工作站的標準輸出/輸出。它也會在工人死亡時重新啓動。該代理可能可能是一個簡單的小shell腳本。 – hirschhornsalz 2009-11-19 22:23:08

0

您可能希望調查進程間通信的共享內存。我似乎記得,在以前的工作中,它能夠以非常類似的狀況恢復。

如果您的平臺支持它,另一種可能性是使用dbus進行進程之間的通信。如果是這樣的話,那麼這兩個過程都不​​會在那裏,但是如果它正在運行,將會採取適當的信息。