我正在使用命令execvp
运行外部程序,现在我想要捕获外部程序的退出代码,如果可能的话,请获取它的PID
。
有可能吗?(我知道我可以在ubuntu中阅读$?
并使用ps faxu
,但这些都是肮脏的方式)
答案 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查询的值。