2012-07-23 73 views
1

我正在使用Poco在我的應用程序中創建一個進程。如果流程正常退出或崩潰,我想重新啓動流程。如何檢測Poco子進程何時崩潰?

ProcessHandle ph = Process::launch("foo.exe", args, 0, &outPipe, 0); 
PipeInputStream istr(outPipe); 
std::string s; 
int c = istr.get(); 
while (c != -1) 
{ 
    s += (char) c; c = istr.get(); 
} 

平滑出口通過等待輸出樁結束如上所示容易處理:

目前如下它被啓動。

當進程崩潰時,我該如何處理?我需要在Windows和Linux上處理這個問題。

回答

1

在另一個線程中使用ProcessHandle對象的wait()函數。當wait()調用返回時,該進程已終止。通常進程崩潰有一個非零退出代碼,並wait()調用返回該退出代碼

+0

很長時間後回覆,但我面臨同樣的問題。我嘗試了'wait()',但總是返回'0'。搜索了很多,但無法找到更好的方式來跟蹤POCO的過程。這就是我放棄POCO來產卵和跟蹤過程的原因。現在使用'fork'和'exec'(對於unix)。 – Aman 2015-11-02 10:19:22