C++ boost进程异步子进程中的run()之后是否需要wait()?

C++ boost进程异步子进程中的run()之后是否需要wait()?,c++,c++11,boost,boost-process,C++,C++11,Boost,Boost Process,我在异步模式下使用Boost进程来获取shell命令的stdout、stderr和返回代码。在下面的代码段中,是否需要调用c.wait?根据增压过程1.68,在增压过程1.65.1中要求的地方不需要 现在,我使用的是Boost 1.68,当我删除对c.wait的调用时,我得到的返回状态是127,而不是我在添加c.wait调用时得到的预期0。调用c.wait有什么区别?是的,正常运行会等待异步操作完成 但是,您可以选择终止运行 当处理程序发出异常时 当另一个线程调用stop时 当异步信号改变程序流

我在异步模式下使用Boost进程来获取shell命令的stdout、stderr和返回代码。在下面的代码段中,是否需要调用c.wait?根据增压过程1.68,在增压过程1.65.1中要求的地方不需要

现在,我使用的是Boost 1.68,当我删除对c.wait的调用时,我得到的返回状态是127,而不是我在添加c.wait调用时得到的预期0。调用c.wait有什么区别?

是的,正常运行会等待异步操作完成

但是,您可以选择终止运行

当处理程序发出异常时 当另一个线程调用stop时 当异步信号改变程序流时
在这种情况下,建议仍然使用wait,以避免僵尸。除此之外,还有一种更灵活的方法,它允许您在同一io_上下文/io_服务实例上多路复用多个进程,并且仍然能够尽快响应子进程完成。

关于不需要等待的说明似乎与类文档相冲突。我认为文档需要做更多的工作。@richardhoges,ios.run不是等待进程退出吗?如果是,那么为什么需要c.wait呢?您可能会认为内部waitpid甚至在第二个服务线程上也被调用了,但我没有花时间查看源代码以进行检查。为什么不写一点MCVE来证明文档是错误的,并将其作为bug提出呢?我在Centos7机器上多次运行了上述程序,无论是否使用c.wait调用。在每种情况下,像“ls”、“pwd”、“uname”这样的简单命令在不使用c.wait调用的情况下,c.exit_代码值为127,而在使用c.wait调用的情况下,它变为0。因此,它看起来不像正常运行,而是等待同步操作完成。
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();