检查子进程是不是处于活动状态(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 上是不是处于活动状态 [重复]

如果系统处于活动状态,如何检入C ++?