启动特定子进程后挂起进程

Posted

技术标签:

【中文标题】启动特定子进程后挂起进程【英文标题】:Suspend process after a specific child process is started 【发布时间】:2012-06-04 13:49:50 【问题描述】:

我有一个 loader.exe,它使用 CreateProcess(..) 启动进程 A 一段时间后,进程 A 启动另一个进程 B。

当 B 将由进程 A 启动时,我想暂停进程 A 和进程 B。 我怎么能等到B?我想收到通知,还是必须在流程完成之前进行轮询?

在运行时我知道进程 B 的名称,并且我知道 B 将由进程 A 启动。

谢谢

【问题讨论】:

你对进程A中的代码有控制权吗? 我无法控制进程A和进程B中的代码,我只是写了loader.exe。 您需要在 B 启动后立即暂停 A 和 B(即在 B 初始化之前)还是可以延迟一秒左右? 【参考方案1】:

使用Boost Interprocess library。您特别感兴趣的是互斥体、条件和信号量。

【讨论】:

抱歉,我想避免使用 3rd 方库。 请注意,Boost.Interprocess 是一个只有头文件的库——没有二进制文件。只需在编译器包含路径中包含您的 Boost 头目录即可。顺便说一句,这也意味着您可以简单地复制他们的代码(或从他们的实现中学习)。【参考方案2】:

如果你不热衷于使用 Boost,可以考虑 win32 互斥锁。有关如何使用它的更多信息,请参阅此线程。 Mutex explanation

基本上,您可以从进程 B 创建具有给定名称的互斥锁,然后等待来自 A/Loader 的相同互斥锁。

【讨论】:

以上是关于启动特定子进程后挂起进程的主要内容,如果未能解决你的问题,请参考以下文章

创建一个不是创建进程子进程的新进程

子进程子回溯

子进程失效,`communicate()` 挂起

golang 热重启

iOS cordova应用程序在启动屏幕后挂起

地理定位在 x 次尝试后挂起,在浏览器重新启动后工作