簡體   English   中英

如何獲得Boost進程的退出代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM