在 c++ 中捕获 shell 脚本退出状态

Capturing shell script exit status in c++

本文关键字:脚本 退出 状态 shell c++      更新时间:2023-10-16

我需要为我正在开发的基于Qt的C++应用程序开发一个小的依赖管理器。此C++应用程序将面向 Linux 系统。所以这就是它的工作原理。我通过 system(( 函数执行一个 shell 脚本。在 shell 脚本中,我检查是否安装了所需的软件包,如果没有,我会以上次执行的命令的状态退出 shell 脚本。我的问题是,我们如何在C++中捕获并处理它?(我想捕获它,以便我可以通知用户某些依赖项未安装并寻求用户许可来安装它们(

C++代码 :

system("./myscript.sh");

外壳代码 :

iwconfig
exit $?

我之前已经尝试过这个方法:

在C++:

int i = system("./myscript.sh");
if(i!=0)
QMessageBox::information(this, tr("test"), tr("program exited with exit code"+i));

但是后来我收到以下错误: 劣质停止,因为它收到来自操作系统的信号。信号名称 : SIGSEGV 信号含义 : 分段故障

如何完成??

system命令的原型是:

int system(const char *command);

它返回它执行的命令的退出代码(示例中的 shell 脚本(。因此,您只需使用:

int status = system("./myscript.sh");

我需要为我正在开发的基于Qt的C++应用程序开发一个小的依赖管理器。

你应该考虑为你(或一些常见的(发行版(例如,Debian 或 Ubuntu 的一些.deb文件(制作一个合适的软件包,因为软件包管理器比你更好地完成这项工作(处理依赖管理(。


system(3( 的返回码实际上是 waitpid(2( 给出的状态码。阅读有关 bash 和 shell 的退出状态。因此,如果最后一个执行的命令(由 system(3( 启动/bin/sh -c(崩溃并出现SIGSEGV(参见 signal(7(...(,您可以使用WIFSIGNALED然后WTERMSIG

我猜你的./myscript.sh运行的某些程序崩溃得很厉害。

您可以考虑使用脚本中内置的 shelltrap来处理这个问题。