从流程名称获取流程的ID

时间:2013-01-05 21:39:48

标签: c++

我需要找到一个进程的ID,我只有它的名字,我知道一次只能运行一个实例,所以不会出现多个进程与一个进程同名的问题我正在寻找。

如果有人可以解释我如何从其名称中获取流程的ID,我将非常感激 - 并且代码示例将很棒。

2 个答案:

答案 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