在主程序运行的过程中启动了一个子进程,有时主进程要等待子进程退出后再执行代码,有时子进程需要感知主进程是否已经退出,这两种情况都需要感知另一个进程是否已经退出,那如何才能实时地感知另一个进程已经退出了呢?本文就来讲述一个有效的方法来实现这一诉求。

1、子进程实时感知主进程是否已经退出
主进程在运行过程中启动了一个子进程,启动子进程时将主进程的进程id传给子进程。子进程是依赖于主进程存活的,如果主进程退出了,则子进程要自动退出,所以子进程要实时感知主进程的状态。有人说,主进程可以在退出时通知子进程,子进程收到通知后再自行退出。但主进程可能会发生崩溃或闪退,这种情况下就没有通知子进程的机会了。
那子进程如何才能实时感知到主进程退出了呢?不管是主进程正常退出,还是异常崩溃闪退,都要感知到。子进程可以启动一个子线程,在子线程中通过主进程传过来的主进程id,获取主进程句柄,然后调用WaitForSingleObject等待主进程退出,可以在子线程中无限等待。如果主进程一旦退出,WaitForSingleObject函数就会立即返回,这时子进程就可以调用ExitProcess等接口自行退出进程了。
本文介绍了如何在C++中实现实时监测一个进程是否已退出,包括子进程感知主进程退出和主进程等待子进程执行完退出的场景。通过创建子线程,使用WaitForSingleObject函数结合OpenProcess获取进程句柄,实现对主进程状态的实时监控。同时强调了监测代码需在子线程中执行以避免阻塞主线程。
订阅专栏 解锁全文
8181

被折叠的 条评论
为什么被折叠?



