我正在异步模式下使用Boost Process
来获取stdout
,stderr
并返回shell命令的代码。在下面的代码段中,是否需要调用c.wait()
?根据{{1}} documentation,在Boost Process 1.68
的{{3}}中并不需要。
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()
的{{1}}而不是预期的returnStatus
,当我添加127
调用时得到的。通话0
有什么不同?
答案 0 :(得分:0)
是的,run()
通常等待异步操作完成。
但是,您可以使用run()
的另一种终止方式
stop()
在这种情况下,建议仍然使用wait()
,以避免僵尸。除此之外,on_exit()
handler是更灵活的方法,它允许您在同一个io_context
/ io_service
实例上多路复用多个进程,并且仍会尽快响应子进程的完成尽可能。