[英]How to get the exit code of a Boost process?
我想知道如何獲取我的子進程的退出代碼。 函數exit_code()始終返回0,與終止(發送SIGKILL)或正確完成無關。
我正在使用Boost 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
任何想法,如何獲取該退出代碼?
您只需檢查返回值就可以獲取退出代碼:
int ec = bp::system("g++ main.cpp");
帶有std::error_code
的重載僅用於處理最初不存在的g++
std::error_code
情況(因此它永遠無法啟動可執行文件,因此沒有退出代碼)。 如果不使用該函數,它將在失敗時引發異常。 1個
try {
int ec = bp::system("g++ main.cpp");
// Do something with ec
} catch (bp::process_error& exception) {
// g++ doesn't exist at all
}
一種更清潔的方法是首先通過搜索$PATH
環境變量來自己解決g++
(就像您的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,即使您告訴它使用C ++ 0x,它的標准庫也很有可能支持std::error_code
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.