小总结一下c/c++检测指定进程是否存在的方式;
方式不唯一,列举本人亲测的方式,没有过多思考,简单实现。
linux:
//linux判断进程是否存在
FILE* fp;
char szbuffer[16] = {0};
fp = popen("ps -ef|grep processName | grep -v grep |wc -l", "r");
//1:存在 0:不存在
fread(szbuffer, 1, 1, fp); //第一个字节就是fp读取出来的结果 0或1,一个字节就可以,sizeof(szbuffer)会有空格补齐,strcmp对比时有误
if(strcmp(szbuffer, "1") != 0)
{
printf("processName is not exist.\n");
}
else
{
printf("processName is exist.\n");
}
pclose(fp);
通过命令行命令获取指定进程的状态,利用popen执行命令并将结果存储到文件指针中,读取指针结果。
windows:
DWORD GetProcessidFromName(LPCTSTR processName)
{
PROCESSENTRY32 pe;
DWORD id=0;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(!Process32First(hSnapshot,&pe))
return 0;
while(true)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(strcmp(pe.szExeFile,processName)==0)
{
id=pe.th32ProcessID;
break;
}
}
CloseHandle(hSnapshot);
return id;
}
qt:
QProcess process;
QString cmd = "tasklist";
process.start(cmd); //打开任务列表
process.waitForFinished(); //等待进程结束
QString str = process.readAllStandardOutput();//获取执行命令后的输出内容
if(str.contains(processName))//判断是否有包含当前指定的进程名
{
qDebug()<<"processName exist.";
}
else
{
qDebug()<<"processName not exist.";
}
只做了简单实现,记录一下,以防后续有需要。