В ожидании boost::process::child
, как узнать, завершился ли он "изящно или нет"?
Допустим, я создаю процесс:
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, который не имеет смысла, я согласен, что main должен возвращать 0 в случае успеха.
Я вижу, что если кто-то убивает процесс во время ожидания (например, с помощью child.terminate
или диспетчера процессов Windows), child.exit_code()
вернет 1.
Итак, в конце концов, когда child.exit_code()
равно 1, как я могу узнать, является ли это значение, возвращаемое основной функцией входа в процесс, или процесс был убит?
Гарантировано ли, что 1 будет означать, что процесс был убит? Тогда программа не должна возвращать 1 и сохранять этот код выхода, чтобы определить конкретную ситуацию, когда она была убита и не завершилась чисто?
Если нет, предоставляет ли boost::process
API что-нибудь, чтобы узнать, закончился ли процесс корректно или был убит?