如何获取Boost进程的退出代码?

时间:2018-05-17 16:28:49

标签: c++ boost signals

我想知道如何获取我的子进程的退出代码。函数exit_code()总是返回0,无关紧要(发送SIGKILL)或正确完成。

我正在使用boost ver 1.65和C ++ 0x。我无法改变这些设置。

正如我在文档中所读到的那样:

  

int exit_code()const;

     

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

所以这个函数没有帮助我,但我可能会使用错误代码。

std::error_code ec;
bp::system("g++ main.cpp", ec);

但是从c ++ 11开始只支持std :: error_code。我试过boost :: system :: error_code,但那不正确。

这里是Boost :: process的链接: https://www.boost.org/doc/libs/1_65_0/doc/html/boost_process/tutorial.html

任何想法,如何获得退出代码?

1 个答案:

答案 0 :(得分:0)

您应该只需检查返回值即可获得退出代码:

int ec = bp::system("g++ main.cpp");

使用std::error_code的重载仅用于处理首先不存在的g++的边缘情况(因此它永远不能启动可执行文件,因此没有退出代码)。如果你不使用那个函数,它会在失败时引发异常。 1

try {
    int ec = bp::system("g++ main.cpp");
    // Do something with ec
} catch (bp::process_error& exception) {
    // g++ doesn't exist at all
}

更简洁的方法是首先通过搜索g++环境变量来解决$PATH问题(就像你的shell一样):

auto binary_path = bp::search_path(`g++`);
if (binary_path.empty()) {
    // g++ doesn't exist
} else {
    int ec = bp::system(binary_path, "main.cpp");
}

1 但是,请注意,C ++ 0x C ++ 11,就在它正式标准化之前,它很可能是你的标准库将支持std::error_code,即使您告诉它使用C ++ 0x。