我需要找到一个进程的ID,我只有它的名字,我知道一次只能运行一个实例,所以不会出现多个进程与一个进程同名的问题我正在寻找。
如果有人可以解释我如何从其名称中获取流程的ID,我将非常感激 - 并且代码示例将很棒。
答案 0 :(得分:2)
从你的其他问题判断(标题中的RegSetValueEx
使其显而易见),我将假设你在Windows上。对于纯Windows API解决方案,您可以使用Toolhelp32 API浏览正在运行的进程的快照,并将其名称与您要查找的名称进行比较。您只有一个名称的注释,但将来或其他人可能有利于拥有该名称的所有PID,因此我会这样做:
std::vector<DWORD> pids;
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //all processes
PROCESSENTRY32W entry; //current process
entry.dwSize = sizeof entry;
if (!Process32FirstW(snap, &entry)) { //start with the first in snapshot
return 0;
}
do {
if (std::wstring(entry.szExeFile) == wantedProcessName) {
pids.emplace_back(entry.th32ProcessID); //name matches; add to list
}
} while (Process32NextW(snap, &entry)); //keep going until end of snapshot
答案 1 :(得分:0)
在* nix环境中,man 3 sysctl
。