在不使用popen()或system()的情况下按名称查找进程的PID,可以使用以下方法:
Boost.Process是一个C++库,用于管理和控制操作系统进程。它提供了一个简单的API,用于创建、监控和检索进程信息。以下是一个示例代码,演示如何使用Boost.Process库查找进程的PID:
#include<boost/process.hpp>
#include<boost/process/environment.hpp>
#include<iostream>
#include<string>
int main() {
std::string process_name = "notepad.exe";
boost::process::context ctx;
boost::process::environment env = ctx.environment();
std::string cmd = "WMIC PROCESS WHERE \"name='" + process_name + "'\" GET ProcessId";
boost::process::ipstream is;
boost::process::child c(cmd, boost::process::std_out > is);
std::string pid;
is >> pid;
std::cout << "PID of "<< process_name << " is "<< pid<< std::endl;
return 0;
}
Windows API提供了一个名为CreateToolhelp32Snapshot的函数,可以创建一个包含所有当前进程信息的快照。然后,可以使用Process32First和Process32Next函数遍历快照中的进程,查找具有特定名称的进程并获取其PID。以下是一个示例代码,演示如何使用Windows API查找进程的PID:
#include<windows.h>
#include <tlhelp32.h>
#include<iostream>
#include<string>
int main() {
std::string process_name = "notepad.exe";
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process_entry;
process_entry.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(snapshot, &process_entry)) {
do {
if (process_entry.szExeFile == process_name) {
std::cout << "PID of "<< process_name << " is "<< process_entry.th32ProcessID<< std::endl;
break;
}
} while (Process32Next(snapshot, &process_entry));
}
CloseHandle(snapshot);
return 0;
}
这两种方法都可以在不使用popen()或system()的情况下按名称查找进程的PID。
领取专属 10元无门槛券
手把手带您无忧上云