#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";
}