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
_popen():这是 Windows 平台上的函数,打开一个进程的管道,并允许你从该命令的标准输出读取数据。你也可以使用标准的 popen() 函数,但它通常在 UNIX 系统上更常见。
fgets():从管道读取命令的输出。
strstr():检查命令输出中是否包含进程名称。
_pclose():关闭管道。
注意事项
_popen() 和 _pclose() 是 Microsoft 提供的扩展函数,仅在 Windows 平台上可用。
如果你希望在其他平台(例如 Linux)上使用类似的方法,应该使用 popen(),并相应地处理管道输出。
如果 findstr 找到指定的进程名称,isProcessRunning() 返回 true,否则返回 false。
浙公网安备 33010602011771号