news 2026/4/18 10:07:10

Qt实现Ubuntu程序自动重启

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt实现Ubuntu程序自动重启

在Ubuntu系统中使用Qt和C++实现根据程序名称重启应用程序的功能,可以通过以下步骤实现:

核心思路

  1. 查找目标进程ID:使用系统命令(如pgrep)获取指定程序名的进程ID
  2. 终止旧进程:使用kill命令结束目标进程
  3. 启动新进程:使用Qt的QProcess启动应用程序的新实例

代码实现

cpp

#include <QCoreApplication> #include <QProcess> #include <QDebug> void restartApplication(const QString &appName) { // 1. 查找进程ID QProcess pidProcess; pidProcess.start("pgrep", QStringList() << appName); pidProcess.waitForFinished(); QByteArray output = pidProcess.readAllStandardOutput(); QStringList pidList = QString(output).split("\n", Qt::SkipEmptyParts); // 2. 终止所有匹配进程 QProcess killProcess; for (const QString &pid : pidList) { killProcess.start("kill", QStringList() << "-9" << pid); killProcess.waitForFinished(); } // 3. 启动新实例 QProcess::startDetached("App_main", QStringList()); qInfo() << "Application restarted successfully"; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); restartApplication("App_main"); // 替换为实际程序名 return a.exec(); }

关键点说明

  1. 进程查找
    • 使用pgrep命令获取进程ID列表
    • 支持多进程场景(如多实例运行)
  2. 进程终止
    • 使用kill -9强制终止进程
    • 循环处理所有匹配的进程ID
  3. 新进程启动
    • 使用QProcess::startDetached启动新实例
    • 保持与父进程分离运行

增强功能建议

  1. 权限检查

    cpp

    1if (getuid() != 0) { 2 qWarning() << "Requires root privileges"; 3 return; 4}
  2. 错误处理

    cpp

    1if (!pidProcess.waitForFinished(3000)) { 2 qCritical() << "Process timeout"; 3}
  3. 跨平台适配(Windows示例):

    cpp

    1#ifdef Q_OS_WIN 2QProcess::execute("taskkill", QStringList() << "/F" << "/IM" << appName + ".exe"); 3#endif

注意事项

  1. 程序命名规范:确保App_main是可执行文件的基础名称
  2. 权限要求:需要系统管理权限终止其他进程
  3. 依赖工具:确保系统已安装pgrepkill工具(通常默认安装)
  4. 信号处理:建议添加进程结束的信号槽处理

此实现方案直接调用系统命令实现进程管理,具有较好的兼容性和可靠性。对于需要更复杂控制逻辑的场景,可以考虑使用Qt的QSharedMemory实现单实例检查,或使用DBus等进程间通信机制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:54:32

淘汰赛对阵图生成demo

<template><div class"page"><section class"panel"><h1>淘汰赛对阵图生成器</h1><div class"controls"><label class"field"><span>队伍数量&#xff08;2-64&#xff09;</span…

作者头像 李华
网站建设 2026/4/18 8:50:03

新手入门 Java:第一个程序 HelloWorld 详解

作为一名刚接触 Java 的大学生&#xff0c;相信很多小伙伴和我一样&#xff0c;从HelloWorld开启 Java 编程之旅。这个看似简单的程序&#xff0c;却包含了 Java 的基础语法和运行逻辑&#xff0c;今天就带大家一步步拆解&#xff0c;搞定 Java 第一个程序&#xff01;一、准备…

作者头像 李华
网站建设 2026/4/12 16:14:35

实际项目开发应用--485通信

一、485通信波特率的选择 长距离485Modbus通信时&#xff0c;波特率设置“小点更好” ——核心原则是“优先保证通信稳定性&#xff0c;再兼顾效率”&#xff0c;高波特率会加剧信号衰减、抗干扰能力下降&#xff0c;反而容易出现丢包、误码&#xff1b;低波特率虽通信速度慢&a…

作者头像 李华
网站建设 2026/4/18 7:55:57

【JavaSE】十八、URL HTTP请求格式 常见报头 状态码 会话保持

文章目录Ⅰ. URLⅡ. 报文格式Ⅲ. HTTP 请求方法&#x1f4a5; GET 和 POST 的区别Ⅳ. HTTP 常见报头Ⅴ. HTTP 状态码Ⅵ. 会话保持一、Cookie二、Session三、两者区别四、理解 cookie、session、token 三者的区别Ⅰ. URL 统一资源描述定位符 URL&#xff08;Uniform Resource L…

作者头像 李华
网站建设 2026/4/18 8:34:36

车间每天报喜不报忧,直到真 OEE 摆上墙,谁都装不下去!

目录 一、车间数据造假&#xff0c;到底有多日常&#xff1f; 1. 停机时间“自动消失” 2. 产量“向上取整”&#xff0c;报废“向下取整” 3. 点检表天天签&#xff0c;谁也没看过 二、为什么大家宁愿造假&#xff0c;也不愿报真实&#xff1f; 1. 指标只考结果&#xf…

作者头像 李华