这里以Linux为例主要是程序启动时,使用

ps -ef | awk '{print $2,$8,$9,$10,$11}'

这个查询下。如果是Windows可以使用tasklist去查。

这里创建了一个类

QApplicationRun.h

#ifndef QAPPLICATIONRUN_H
#define QAPPLICATIONRUN_H#include <QObject>class QApplicationRun : public QObject
{Q_OBJECT
public:QApplicationRun(QObject *parent = 0);static bool isProgramAlreadyRunningInOS();
};#endif // QAPPLICATIONRUNONECE_H

QApplicationRun.cpp

#include "QApplicationRun.h"
#include <QCoreApplication>
#include <QDebug>
#include <QProcess>QApplicationRunOnce::QApplicationRunOnce(QObject *parent) : QObject(parent)
{}bool QApplicationRunOnce::isProgramAlreadyRunningInOS()
{QString processName = qApp->applicationName();int account = 0;QString cmd = "ps -ef | awk '{print $2,$8,$9,$10,$11}'";QProcess p;p.start("bash", QStringList() << "-c" << cmd);if(!p.waitForFinished()){qDebug() << cmd << " run failed in QApplicationRunOnece::isProgramAlreadyRunningInOS()";return true;}QString ret = p.readAllStandardOutput();QStringList lineList = ret.split("\n");for(int i = 1; i < lineList.size(); i++){QString PIDStr = lineList[i].split(" ")[0];QString programStr = lineList[i].split(PIDStr)[1].trimmed();QString programTmpPathNotPara = programStr.split(" ")[0];QStringList processTmpList = programTmpPathNotPara.split("/");QString programTmpName = processTmpList[processTmpList.size() - 1];if(programTmpName == processName){account++;}if(account >= 2){return true;}}return false;
}

调用,可以直接放到main函数里面:

    if(QApplicationRun::isProgramAlreadyRunningInOS()){qDebug() << "程序已在运行";exit(0);}

Qt笔记-进程只能存在1个(Linux适用,Windows有思路)相关推荐

  1. linux与linux传文件乱码,关于Linux与windows传递文件乱码问题

    linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...

  2. Qt 守护进程,保活

    一,背景 一台windows电脑,只允许一个我方开发的软件,并且设置了自定义桌面的方式,也就是说没有桌面,软件一旦崩溃或者无响应,那么用户只能是重启电脑,体验很差,所以单独写一个守护进程,当主进程出现 ...

  3. linux:进程占用的端口,在linux中查看进程占用的端口号

    在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息. 可以使用以下六种方法查看端口信息. ss:可以用于转储套接字统计信息. netstat:可以显示打开的套接字列表 ...

  4. linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...

    Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...

  5. Linux下进程的建立 并附Linux exec函数族

    我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看 ...

  6. [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务

    在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...

  7. Linux 学习笔记(借鉴黑马程序员Linux课程)

    Linux视频课程 简介 Linux诞生于1991年,由林纳斯·托瓦兹在21岁时完成.此后成为最为流行的服务器操作系统之一. Linux内核和系统发行版 由Linux系统内核和系统级应用程序两部分组成 ...

  8. git学习笔记——Linux和Windows下git的基本操作

    git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...

  9. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...

最新文章

  1. mysql 分布式 安装_mysql分布式集群安装-阿里云开发者社区
  2. 网站建设很简单,想要成功却很难
  3. VC++ MFC DLL动态链接库编写详解
  4. stm32数据手册boot_STM32的ISP下载的原理是什么呢?
  5. 分类算法——K近邻算法及其R实现
  6. php数据库操作命令精华大全
  7. 不得不说--自动化测试元素定位与用例设计
  8. c gui和java gui_C/C++编程GUI库比较
  9. “飞客蠕虫”形成全球最大僵尸网络 每日感染数万网民
  10. ubuntu16.04 安装jre
  11. ajax上传图片springmvc,springmvc ajax上传图片(jquery)
  12. 发布房源(三)02——获取表单数据- onSelect 处理方法 打印表单数据
  13. 2020 年 4 月使用 Aria2 加速下载百度网盘文件
  14. golang 报错 missing go.sum entry
  15. 报警c语言程序,PIC单片机警报声C程序
  16. 画图形表格用ECharts
  17. 微信小程序 RangeError: WebAssembly.Memory(): could not allocate memory
  18. linux查看raid情况工具,使用MegaCli工具查看Raid磁盘阵列状态
  19. Oracle中Blob和Clob类型的区别
  20. 在我的智能手机上使用 mysql 运行节点服务器

热门文章

  1. Java华丽转身 —— GUI编程宝典
  2. 广东鸿图:搭建业务报表,摆脱人工计数,工作效率提升150%
  3. 【转】设计模式学习笔记之命令模式
  4. 在mount里看到哪个设备文件的一些笔记
  5. 从C语言过渡到C++并不容易啊,大家说呢?
  6. 飞鸽传书:服务器开发系列—系统构架
  7. 《XIM 企业即时通讯软件》
  8. 桌面Linux市场份额终于突破1%
  9. #ifdef __cplusplus是什么意思
  10. 我来谈谈小程序和工作方向