如何检查一个进程是否关闭或仍在运行?

4

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


4
离题:谈到进程时,“关闭”更好的词汇应该是“终止”:应用窗口关闭,进程终止。 - stakx - no longer contributing
谢谢您的提醒,我忘记了“终止”这个词。 - Vladimir
1个回答

7

谢谢您的回复。我想澄清一下。 那么让 hProcessB 成为进程_B_ 的句柄,我可以这样做吗? 如果(WaitForSingleObject(hProcessB, INFINITE) == WAIT_OBJECT_0) { //然后我的进程B终止了,因此我会做些什么...... } - Vladimir
我这样做是为了确保进程_B_已经终止。我设置标志INFINITE,以不指定具体的时间段(超时间隔),而是等待进程_B_的终止。我从MSDN上了解到这一点。 - Vladimir
@Vladimir,是的。请注意,如果您想定期检查,您也可以传递超时参数到WaitForSingleObject(),但需要检查WAIT_TIMEOUT - hmjd
啊,这是用于定期检查进程是否仍在运行的超时时间。看起来我没有充分阅读文档。非常感谢您提供的信息。现在我会尝试将其全部应用到实践中。 - Vladimir
@hmjd @MSalters 我在我的程序中写了这样的代码: ... while (WaitForSingleObject (hProcessB, INFINITE)! = WAIT_OBJECT_0); ... 也就是说,当进程_B_正在运行时,我们执行操作;。当它终止时,我们继续执行。这样正确吗? - Vladimir
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接