检查子进程是不是处于活动状态(Windows、C++)
Posted
技术标签:
【中文标题】检查子进程是不是处于活动状态(Windows、C++)【英文标题】:Check if child process is alive (Windows, C++)检查子进程是否处于活动状态(Windows、C++) 【发布时间】:2021-08-26 09:00:02 【问题描述】:当我使用
启动一个程序(Windows、C++)时intptr_t childHandle=_spawnvp( _P_NOWAIT, "program.exe", argv );
它返回一个 intptr_t。来自文档:
"来自异步 _spawnvp 或 _wspawnvp 的返回值 (为模式指定的_P_NOWAIT 或_P_NOWAITO)是进程句柄。”
但是我找不到如何使用intptr_t childHandle
来检查进程是否还活着。
【问题讨论】:
它声明它返回进程句柄,因此您可以使用WinAPI函数GetExitCodeProcess并将_spawnvp的返回值转换为HANDLE。 【参考方案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, &exit_code) != 0);
if(exit_code == STATUS_PENDING)
std::cout << "Alive ...\n";
Sleep(1000);
while(exit_code == STATUS_PENDING);
std::cout << "Done\n";
【讨论】:
以上是关于检查子进程是不是处于活动状态(Windows、C++)的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种非阻塞方式来检查 asyncio 子进程是否处于活动状态?
C Windows API 确定用户是不是处于非活动状态,包括播放媒体
C/C++/Assembly 以编程方式检测超线程在 Windows、Mac 和 Linux 上是不是处于活动状态 [重复]