2

我有一个启动另一个进程 B 的进程 A。
当前进程 B 在退出之前等待进程“A”发出的信号(WaitForSingleObject),一旦设置了信号,进程 B 就会退出。但是,当进程 A 意外终止或崩溃时,我最终会发现进程 B 仍在运行。除非进程 A 崩溃,否则如何让 B 无限期地等待信号?换句话说.. 进程 B 应该只在进程 A 运行之前保持活动状态。谢谢

4

4 回答 4

1

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

另一种方法是将 B 附加到 A 作为调试器。然后你会在进程退出时收到一个事件,并且可以完美同步退出。

于 2012-08-24T10:04:44.157 回答
0

启动时B,将 A 的 pid 传递给它。在其中B,启动一个新线程,该线程主动检查该 pid 是否对应于 running A。当这不再成立时,退出。

于 2012-08-24T10:01:12.533 回答
0

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

于 2012-08-24T10:30:46.433 回答
0

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

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

于 2012-08-25T01:55:43.960 回答