这里可能存在一些问题。首先,我认为评论中文档 https://www.boost.org/doc/libs/1_71_0/doc/html/boost_process/tutorial.html#boost_process.tutorial.async_io...
将 boost::asio::io_service 的实例传递给启动
函数自动导致它异步等待退出,
所以不需要等待
...参考示例after您所显示的代码。具体来说...
boost::asio::io_service ios;
std::vector<char> buf(4096);
bp::child c(bp::search_path("g++"), "main.cpp", bp::std_out > boost::asio::buffer(buf), ios);
ios.run();
int result = c.exit_code();
哪里的io_service
通过引用传递child
ctor.
该评论也略有误导性。虽然随后的调用确实如此ios.run()
does异步等待退出,似乎(boost 1.71.0)退出代码没有像人们希望的那样修复。退出代码存储在child
类如...
std::shared_ptr<std::atomic<int>> _exit_status;
从源代码的快速扫描看来_exit_status->store(...)
仅由以下成员调用...
boost::process::child::running
boost::process::child::wait
boost::process::child::wait_until
因此,即使进程已经退出(假设一切顺利)ios.run()
返回一个或多个running
, wait
or wait_until
必须调用以使退出代码可用。
正如 @sehe 在其他地方评论的那样,这看起来可能是一种回归。如果我能找到错误报告,我会更新它。与此同时,解决方法是简单地调用c.wait()
before c.exit_code()
.