在等待 aboost::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 是否提供了一些信息来了解进程是否干净地结束或被杀死?