在c ++中捕获外部程序的退出代码

时间:2012-10-25 06:27:33

标签: c++

我正在使用命令execvp运行外部程序,现在我想要捕获外部程序的退出代码,如果可能的话,请获取它的PID

有可能吗?(我知道我可以在ubuntu中阅读$?并使用ps faxu,但这些都是肮脏的方式)

2 个答案:

答案 0 :(得分:3)

程序运行成功后,exec*函数不会返回,因此您无法通过execvp获取返回代码。但是,如果您使用fork / wait,则可以从wait*函数中的状态代码中获取退出代码:

int status;
if (wait(&status) != -1) {   // similar for waitpid, wait4, etc.
    if (WIFEXITED(status)) {
        exit_code = WEXITSTATUS(status);
    } else {
        // handle other conditions, e.g. signals.
    }
} else {
    // wait failed.
}

您可以查看wait(2)手册页中的示例。

答案 1 :(得分:1)

另请尝试int a_number = std::system("/path/to/app")

这有时可用于返回xmessage查询的值。