【问题标题】:How to check if a process is closed/alive?如何检查进程是否关闭/活着?
【发布时间】:2013-02-26 09:14:22
【问题描述】:

我正在用 C++ 编写程序。在我的代码中,我使用函数CreateProcess 运行进程A。进程 A 启动另一个进程 BB 工作一段时间然后关闭。 B 的运行时间取决于各种参数。有时 B 工作 1 小时,但有时 -- 将近 2 小时。我需要知道 B 何时结束其工作(当 B 关闭时)。如何检查第二个程序 B 的关闭情况?换句话说,是否有任何函数(例如,在 WINAPI 中)来检查进程是否处于活动状态?

【问题讨论】:

  • 离题:当谈到进程时,“关闭”更好的词是“终止”:应用程序窗口关闭;进程终止。
  • 谢谢你的注意,我忘记了“终止”这个词。

标签: c++ winapi time process


【解决方案1】:

使用WaitForSingleObject(),传入进程句柄。

【讨论】:

  • 感谢您的回复。我想澄清一下。所以让hProcessB 成为进程B 的句柄。我可以执行以下操作吗? if (WaitForSingleObject (hProcessB, INFINITE) == WAIT_OBJECT_0) { // Then my process B terminated and hence I do something... }
  • 我这样做是为了确保进程 B 终止。我将标志INFINITE 设置为不指定具体的时间段(超时间隔),而是等待进程 B 终止。我是从 MSDN 知道的。
  • @Vladimir,是的。请注意,如果您想定期检查但还需要检查WAIT_TIMEOUT,也可以将超时传递给WaitForSingleObject()
  • 啊,所以这是定期检查进程是否仍在运行的超时。看起来我没有正确阅读文档。非常感谢你提供的信息。现在我将尝试在实践中应用它。
  • @Vladimir:你甚至可以使用if (WaitForSingleObject (hProcessB, 0) == WAIT_OBJECT_0),无论哪种情况都会立即返回。
猜你喜欢
  • 2016-03-07
  • 2019-02-15
  • 2017-01-06
  • 1970-01-01
  • 2016-06-19
  • 2013-09-29
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多