2

以下程序:

#include <iostream>
#include <boost/process.hpp>
#include <boost/asio.hpp>

int main() {
    boost::asio::io_service ios;
    boost::process::child c("/bin/ls");
    ios.run();
    std::cout << c.exit_code() << std::endl;
}

输出383

$ g++ test.cc
$ ./a.out
383

我希望它能够成功完成输出0/bin/ls

我错过了什么?

4

2 回答 2

3

您需要wait完成子进程。来自boost::process::child::exit_code的文档

如果孩子没有被等待或被终止,则返回值没有任何意义。

所以我希望下面给出预期的结果......

#include <iostream>
#include <boost/process.hpp>

int main ()
{
    boost::process::child c("/bin/ls");
    c.wait();
    std::cout << c.exit_code() << std::endl;
}
于 2019-12-03T12:08:18.073 回答
0

作为一个简单的替代方案,您可以使用boost::process::on_exitstd::future<int>

boost::asio::io_service ios;
std::future<int> exit_code;
boost::process::child c("/bin/ls", ios, boost::process::on_exit=exit_code);
ios.run();
std::cout << exit_code.get() << std::endl;

std::future<T>::get一旦未来具有价值,对的调用就会解锁。

于 2020-10-30T15:56:46.840 回答