如何使进程B仅在进程A处于活动状态时运行
How to make process B running only while Process A is alive
我有一个启动另一个进程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。
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何确定boost msm中的特定状态是否为活动状态
- C++简单的示例,但为什么进程以状态 -1073741510 终止
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- “B1的多重定义”,即使警卫处于活动状态
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- 当 /Whorearchive选项处于活动状态时,无法使用Visual Studio链接到Windows上的自构建张量
- 进程以状态 -1073741571 终止(0 分钟、3 秒)
- IBM Rhapsody c++ 代码生成 - 为什么总是在状态图周围放置一个活动状态
- C++进程以状态 -1073741819 终止
- 暂停游戏OnSteamVR叠加层处于活动状态
- 我怎么知道哪种上下文处于活动状态
- 如何防止我的dll在某个进程未处于活动状态时运行
- 在子进程处于活动状态时读取子进程的输出
- 如何使进程B仅在进程A处于活动状态时运行
- C++ 在进程杀死其父进程后保持进程活动状态
- 在Linux/ c++中,发送给线程/进程的信号是否使其变为活动状态?