c++判断windows进程是否存在

#include <iostream>
#include <cstdio>
#include <cstring>

bool isProcessRunning(const std::string& processName) {
    // 构建命令来查找指定进程
    std::string command = "tasklist | findstr " + processName;

    // 打开命令管道
    FILE* pipe = _popen(command.c_str(), "r");
    if (!pipe) {
        std::cerr << "Failed to run command\n";
        return false;
    }

    // 读取命令输出
    char buffer[128];
    bool found = false;
    while (fgets(buffer, sizeof(buffer), pipe)) {
        if (strstr(buffer, processName.c_str())) {
            found = true;
            break;
        }
    }

    // 关闭管道
    _pclose(pipe);

    return found;
}

int main() {
    std::string processName = "notepad.exe"; // 你要查找的进程名
    if (isProcessRunning(processName)) {
        std::cout << processName << " is running.\n";
    } else {
        std::cout << processName << " is not running.\n";
    }
    return 0;
}

代码解释
tasklist | findstr :构造命令,通过 tasklist 列出所有进程,并使用 findstr 搜索指定进程名。
_popen():这是 Windows 平台上的函数,打开一个进程的管道,并允许你从该命令的标准输出读取数据。你也可以使用标准的 popen() 函数,但它通常在 UNIX 系统上更常见。
fgets():从管道读取命令的输出。
strstr():检查命令输出中是否包含进程名称。
_pclose():关闭管道。
注意事项
_popen() 和 _pclose() 是 Microsoft 提供的扩展函数,仅在 Windows 平台上可用。
如果你希望在其他平台(例如 Linux)上使用类似的方法,应该使用 popen(),并相应地处理管道输出。
如果 findstr 找到指定的进程名称,isProcessRunning() 返回 true,否则返回 false。

posted on   jobgeo  阅读(88)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示