我使用Boost Process
在boost process 1.65.1
模式下获取stdout
,stderr
和shell命令的返回代码。在下面的代码片段中,调用c.wait()
是必需的吗?根据Boost Process 1.68
文档,它不是必需的,因为根据boost process 1.65.1
的文档,它是必需的。
std::string command = "ls";
boost::asio::io_service ios;
std::future<std::string> dataOut;
std::future<std::string> dataErr;
bp::child c(command, bp::std_in.close(), bp::std_out > dataOut, bp::std_err > dataErr, ios);
ios.run();
c.wait();
stdOut = dataOut.get();
stdErr = dataErr.get();
returnStatus = c.exit_code();
字符串
现在,我正在使用Boost 1.68
,当我删除对c.wait()
的调用时,我得到的是127
的returnStatus
,而不是我在添加c.wait()
调用时得到的预期0
。调用c.wait()
有什么区别?
2条答案
按热度按时间2nbm6dog1#
是的,
run()
通常会等待dec操作完成。但是,您可以 * 使用
run()
作为替代终止方式stop()
时在这种情况下,建议仍然使用
wait()
,这样可以避免僵尸。除此之外,on_exit()
handler是更灵活的方法,因为它允许您在同一个io_context
/io_service
示例上多路复用多个进程,并且仍然可以尽快响应子进程完成。sqyvllje2#
.wait将等待来自子进程的信号,如果已经发出信号意味着已经完成运行,将分配从CMD返回的正确退出代码,而不等待u将得到127,正如你所注意到的。
的数据