检测指定进程是否存在是否运行

这篇博客介绍了在Linux和Windows环境下,使用C/C++检测指定进程是否存在的两种方法。在Linux中,通过popen执行`ps -ef | grep 进程名 | grep -v grep | wc -l`命令来判断;在Windows中,使用`CreateToolhelp32Snapshot`函数遍历进程并比较进程名。此外,还展示了在Qt环境中如何借助QProcess进行类似操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小总结一下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);
    
    if (hSnapshot == INVALID_HANDLE_VALUE)
        return 0;
    
    pe.dwSize = sizeof(PROCESSENTRY32);
    
    if (!Process32First(hSnapshot, &pe))
    {
        CloseHandle(hSnapshot);
        return 0;
    }
    
    do
    {
        // 使用 _tcscmp 替代 strcmp,自动适应 ANSI/Unicode 字符集
        if (_tcscmp(pe.szExeFile, processName) == 0)
        {
            id = pe.th32ProcessID;
            break;
        }
    } while (Process32Next(hSnapshot, &pe));
    
    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.";
    }

只做了简单实现,记录一下,以防后续有需要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值