Проверьте, активен ли дочерний процесс (Windows, C )

#c #visual-c #process

Вопрос:

Когда я запускаю программу (Windows, C ) с помощью

 intptr_t childHandle=_spawnvp( _P_NOWAIT, "program.exe", argv );
 

он возвращает значение intptr_t. Из документации:

«Возвращаемое значение асинхронного _spawnvp или _wspawnvp (_P_NOWAIT или _P_NOWAITO, указанное для режима) является дескриптором процесса».

Но я не могу найти, как использовать intptr_t childHandle , чтобы проверить, жив ли еще процесс.

Комментарии:

1. В нем говорится, что он возвращает дескриптор процесса, поэтому вы можете использовать функцию WinAPI GetExitCodeProcess и привести возвращаемое значение _spawnvp для ОБРАБОТКИ.

Ответ №1:

Вы можете использовать функцию WinAPI GetExitCodeProcess , потому _spawnvp что возвращает собственное значение дескриптора:

 #include <iostream>
#include <cassert>
#include <process.h>
#include <Windows.h>

int main()
{
    const char *argv[] = { "cmd.exe", "/C", "exit", nullptr };
    HANDLE handle = HANDLE(_spawnvp(_P_NOWAIT, "cmd.exe", argv));
    assert(handle != 0);

    DWORD exit_code;
    do
    {
        assert(GetExitCodeProcess(handle, amp;exit_code) != 0);
        if(exit_code == STATUS_PENDING)
            std::cout << "Alive ...n";
        
        Sleep(1000);
    }
    while(exit_code == STATUS_PENDING);

    std::cout << "Donen";
}