boost::process::child
을 기다리는 동안 그것이 "정상적으로 종료했는지"종료했는지 어떻게 알 수 있습니까?boost :: process 프로세스가 "정상적으로 또는 정상적으로 종료"했을 때 어떻게 알 수 있습니까?
의이 나는이 과정이를 작성한다고 가정 해 봅시다 :
boost::process::child child("myprg.exe", "5000");
child.wait();
int res = child.exit_code();
을 myprg.exe은 여기서
int main(int argc, char* argv[])
{
if (argc == 2)
{
boost::this_thread::sleep(boost::posix_time::milliseconds(atoi(argv[1])));
return 1;
}
return 0;
}
참고 : 말도 안돼 이것을 MCVE을, 나는 성공적인 경우 0을 반환해야합니다 주요 동의합니다.
은 내가 어떻게 알 수 있습니다, 그것은 (예 또는 Windows 프로세스 관리자에 대한 child.terminate
사용) 기다리는 동안 누군가가 프로세스를 종료하는 경우 child.exit_code()
이 1 일 때, child.exit_code()
는, 결국, 그래서 1
를 반환 볼 이것이 프로세스의 메인 엔트리 함수에 의해 반환 된 값이거나 프로세스가 종료 된 경우?
1은 프로세스가 종료되었음을 의미합니까? 그런 다음 프로그램은 1을 반환하지 말아야하며이 종료 코드를 유지하여 사망 한 특수한 상황을 식별하고 정상적으로 종료하지 않아야합니다.
그렇지 않은 경우 boost::process
API는 프로세스가 정상적으로 종료되었는지 또는 죽었는지 알 수 있습니까?
플랫폼에 독립적 인 방법은 없지만 프로세스 그룹을 사용하고 CHLD 신호를 처리 할 수 있다는 것을 기억하십시오. 즉, Boost Process API의 추상화가 깨졌습니다. – sehe