C++, Как определить, работает ли Windows Process?

Это касается процессов Windows XP.

У меня есть выполнение процесса, давайте назовем его Process1. Process1 создает новый процесс, Process2, и сохраняет его идентификатор.

Теперь, в какой-то момент Process1 хочет, чтобы Process2 сделал что-то, таким образом, он сначала должен удостовериться, что Process2 все еще жив и что пользователь не не уничтожил его.

Как я могу проверить, что этот процесс все еще работает? Так как я создал его, у меня есть идентификатор Процесса, я думал бы, что существует некоторая библиотечная функция вроде IsProcessIDValid (идентификатор), но я не могу найти его на MSDN

57
задан 2 August 2013 в 00:04

1 ответ

решение, предоставленное @user152949, как это было отмечено в комментариях, пропускает первый процесс и не повреждается, когда "существует", имеет значение true. Позвольте мне обеспечить исправленную версию:

#include <windows.h>
#include <tlhelp32.h>

bool IsProcessRunning(const wchar_t* const processName) {
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    const auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (!Process32First(snapshot, &entry)) {
        CloseHandle(snapshot);
        return false;
    }

    do {
        if (!_wcsicmp(entry.szExeFile, processName)) {
            CloseHandle(snapshot);
            return true;
        }
    } while (Process32Next(snapshot, &entry));

    CloseHandle(snapshot);
    return false;
}
2
ответ дан 1 November 2019 в 15:52

Другие вопросы по тегам:

Похожие вопросы: