c++ boost进程中的run()之后是否需要wait()?

qyyhg6bp  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(88)

我使用Boost Processboost process 1.65.1模式下获取stdoutstderr和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()的调用时,我得到的是127returnStatus,而不是我在添加c.wait()调用时得到的预期0。调用c.wait()有什么区别?

2nbm6dog

2nbm6dog1#

是的,run()通常会等待dec操作完成。
但是,您可以 * 使用run()作为替代终止方式

  • 当异常从处理程序发出时,
  • 当其他线程调用stop()
  • 当UART信号改变程序流时

在这种情况下,建议仍然使用wait(),这样可以避免僵尸。除此之外,on_exit() handler是更灵活的方法,因为它允许您在同一个io_context/io_service示例上多路复用多个进程,并且仍然可以尽快响应子进程完成。

sqyvllje

sqyvllje2#

.wait将等待来自子进程的信号,如果已经发出信号意味着已经完成运行,将分配从CMD返回的正确退出代码,而不等待u将得到127,正如你所注意到的。


的数据

相关问题