Qt笔记-进程只能存在1个(Linux适用,Windows有思路)
这里以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有思路)相关推荐
- linux与linux传文件乱码,关于Linux与windows传递文件乱码问题
linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...
- Qt 守护进程,保活
一,背景 一台windows电脑,只允许一个我方开发的软件,并且设置了自定义桌面的方式,也就是说没有桌面,软件一旦崩溃或者无响应,那么用户只能是重启电脑,体验很差,所以单独写一个守护进程,当主进程出现 ...
- linux:进程占用的端口,在linux中查看进程占用的端口号
在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息. 可以使用以下六种方法查看端口信息. ss:可以用于转储套接字统计信息. netstat:可以显示打开的套接字列表 ...
- linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...
Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...
- Linux下进程的建立 并附Linux exec函数族
我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看 ...
- [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务
在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...
- Linux 学习笔记(借鉴黑马程序员Linux课程)
Linux视频课程 简介 Linux诞生于1991年,由林纳斯·托瓦兹在21岁时完成.此后成为最为流行的服务器操作系统之一. Linux内核和系统发行版 由Linux系统内核和系统级应用程序两部分组成 ...
- git学习笔记——Linux和Windows下git的基本操作
git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...
最新文章
- mysql 分布式 安装_mysql分布式集群安装-阿里云开发者社区
- 网站建设很简单,想要成功却很难
- VC++ MFC DLL动态链接库编写详解
- stm32数据手册boot_STM32的ISP下载的原理是什么呢?
- 分类算法——K近邻算法及其R实现
- php数据库操作命令精华大全
- 不得不说--自动化测试元素定位与用例设计
- c gui和java gui_C/C++编程GUI库比较
- “飞客蠕虫”形成全球最大僵尸网络 每日感染数万网民
- ubuntu16.04 安装jre
- ajax上传图片springmvc,springmvc ajax上传图片(jquery)
- 发布房源(三)02——获取表单数据- onSelect 处理方法 打印表单数据
- 2020 年 4 月使用 Aria2 加速下载百度网盘文件
- golang 报错 missing go.sum entry
- 报警c语言程序,PIC单片机警报声C程序
- 画图形表格用ECharts
- 微信小程序 RangeError: WebAssembly.Memory(): could not allocate memory
- linux查看raid情况工具,使用MegaCli工具查看Raid磁盘阵列状态
- Oracle中Blob和Clob类型的区别
- 在我的智能手机上使用 mysql 运行节点服务器