我想知道如何获取我的子进程的退出代码。函数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
任何想法,如何获得退出代码?
答案 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。