怎么知道一个进程是否已经结束?

fengzi_zhu 2003-03-17 05:09:15
在CreateProcess()之后并没有直接CloseHandle().那么该进程结束时其进程对象并没有释放。这应该是对的。如果进程建立之后马上释放其句柄,保存其ID,一段时间后怎么知道这个ID是否还是以前进程的ID?也就是说不用WAITFORSINGLEOBJECT()怎么知道一个进程是否已经结束。

接http://expert.csdn.net/Expert/topic/1505/1505425.xml?temp=.5620386
...全文
82 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzi_zhu 2003-03-21
  • 打赏
  • 举报
回复
To JoeRen(地球发动机)

至于为什么不保留创建进程时的句柄的原因是: 我的主程序,创建了许多的子进程,我想让这些子进程结束后就释放其内核对象(如果主程序中没有释放子进程的句柄时它的核心对象是不会被释放的),而且也没有时间等他们一一结束.
JoeRen 2003-03-19
  • 打赏
  • 举报
回复
1、进程ID很少重用
2、OpenProcess失败说明进程已经结束
3、如果成功当然也不能说明他代表以前的进程;但是有一些手段可以获得有关它的更多信息,例如获取其模块句柄等等,可以作为参考的依据。
4、为什么不保留创建进程时的句柄呢?这是最简单易行的方法。
fengzi_zhu 2003-03-19
  • 打赏
  • 举报
回复
现在的问题就是不知道该进程是否已经结束了,此ID时候有效,或者它是否还是代表以前的那个进程。
JoeRen 2003-03-19
  • 打赏
  • 举报
回复
有ID就可以调用OpenProcess换成句柄了阿
fengzi_zhu 2003-03-19
  • 打赏
  • 举报
回复
我说了 没有句柄,只有ID,就不能用WaitForSingleObject()了
zhuzy2001 2003-03-18
  • 打赏
  • 举报
回复
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval
);
是否可以?
fengzi_zhu 2003-03-18
  • 打赏
  • 举报
回复
除了检查进程列表就没有别的帮法了吗?
In355Hz 2003-03-17
  • 打赏
  • 举报
回复
不要 CloseHandle 释放其句柄, 一段时间后调用 GetExitCodeProcess ,如果取回的 ExitCode 不是 STILL_ACTIVE,就说明该进程已经结束。
halk 2003-03-17
  • 打赏
  • 举报
回复
CloseHandle后,子进程就跟父进程断绝联系了。这时候只能通过定期检查进程列表来确认该进程是否结束。获得进程列表的方法有几种,我喜欢用ToolHelp.
shuker 2003-03-17
  • 打赏
  • 举报
回复
或者也可以使用OpenProcess来得到进陈句柄的
shiyongfan 2003-03-17
  • 打赏
  • 举报
回复
In355Hz说得好极了,高手。同意!!!并强烈建议提出问题者采用此方法!
对线程亦适用。只不过是GetExitCodeThread()

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧