如何使进程B仅在进程A处于活动状态时运行

How to make process B running only while Process A is alive

本文关键字:进程 活动状态 运行 何使      更新时间:2023-10-16

我有一个启动另一个进程B的进程a。
当前进程B在退出前等待进程"a"发出的信号(WaitForSingleObject),一旦设置了信号,进程B就退出。然而,当进程A意外终止或崩溃时,进程B仍在运行。除了进程A崩溃之外,我如何让B无限期地等待信号?换句话说。。进程B应仅在进程A运行之前保持活动状态。感谢

进程A的进程句柄上的WaitForSingleObject;它将在A死亡时发出信号。

另一种方法是将B作为调试器附加到A。然后,当进程退出时,您将获得一个事件,并且可以完全同步地退出。

启动B时,将A的pid传递给它。在B中,启动一个新线程,该线程会主动检查该pid是否对应于正在运行的A。当这种情况不再存在时,退出。

您还可以让tcp套接字在两个进程之间发送心跳消息,甚至可以将其扩展到A和B位于不同机器上的位置。

最简单的方法是使用互斥而不是事件。如果进程A退出,互斥锁将被视为已放弃,进程B对互斥锁的等待将得到满足。

或者,你可以给B一个处理a的句柄,让它同时等待事件和处理a的手柄。如果你使用这种方法,B获得a句柄的最佳方式是继承;在进程A中使用DuplicateHandle(bInheritHandle设置为TRUE)将GetCurrentProcess返回的伪句柄转换为实句柄。在命令行或环境变量中将句柄的值传递给进程B。