2012-07-23 2 views
1

Poco를 사용하여 앱에서 프로세스를 만듭니다. 프로세스가 정상적으로 종료되거나 충돌이 발생하면 프로세스를 다시 시작하고 싶습니다.Poco sub 프로세스가 충돌하는 것을 감지하는 방법은 무엇입니까?

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() 호출이 반환되면 프로세스가 종료되었습니다. 일반적으로 충돌이 0이 아닌 종료 코드를 처리하고 wait() 호출이 해당 종료 코드를 반환합니다.

+0

오랜 시간이 지나면 답장하지만 동일한 문제에 직면하고 있습니다. 'wait()'를 시도했지만 항상 '0'을 반환합니다. 많이 찾았지만 POCO에서 프로세스를 추적하는 더 좋은 방법을 찾지 못했습니다. 이것이 내가 프로세스를 생성하고 추적하기 위해 POCO를 버리는 이유입니다. 이제'fork'와'exec' (유닉스 용)를 사용합니다. – Aman