在 c++ 中捕获 shell 脚本退出状态
Capturing shell script exit status in c++
我需要为我正在开发的基于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
来处理这个问题。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 如何通过cpp程序运行shell脚本
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 在程序中编写脚本来编写和编译代码
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 如何在c++中使用system()来运行包含空格的python脚本
- 退出简单while循环时出现问题
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 使用vscode调试时,GDB意外退出
- 在 c++ 中捕获 shell 脚本退出状态
- MSVC2013:如何避免在错误地使用预构建脚本中止构建过程(错误MSB3073:VCEnd"退出,代码为 -1)
- 如果满足条件,如何退出Qt脚本
- 当我调用脚本并使脚本保持运行时,C++应用程序在退出时挂起