怎么查看进程是否结束?

d52787790 2010-05-28 10:24:31
创建的进程有时候没有关闭,一直在任务管理器运行
其实我创建的进程就是一个连接,只有连接数超过服务器最大连接数时,才会出现。


if (CreateProcess(...,&pi)
{
if(WaitForSingleObject(pi.hProcess, 180000) == WAIT_OBJECT_0 )
{
//do something
}
else
{
Timeout";
}

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); //只要创建进程成功都有关闭啊
}

//我的处理方法 加上以下代码
DWORD dwResult;
GetExitCodeThread(pi.hProcess, &dwResult);
if(dwRsult == STILL_ACTIVE)//如果说明还在运行,再关一次
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}

//不知道可以否?
...全文
266 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2010-05-28
  • 打赏
  • 举报
回复
要不你就直接WaitForSingleObject(pi.hProcess, INFINITE)一直等待
visualassist4680 2010-05-28
  • 打赏
  • 举报
回复
DWORD dwResult;
GetExitCodeThread(pi.hProcess, &dwResult);
if(dwRsult == STILL_ACTIVE)//如果说明还在运行,再关一次
{
TerminateProcess(pi.hProcess);
}
汪宁宇 2010-05-28
  • 打赏
  • 举报
回复
d52787790 2010-05-28
  • 打赏
  • 举报
回复
CloseHandle还需要在TerminateProcess吗?
d52787790 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cxz003 的回复:]
CloseHandle关闭句柄难道就没用?

没用
[/Quote]
可是我一直这样,进程也都关了啊。 CloseHandle减少句柄计数吧?




  • 打赏
  • 举报
回复
CloseHandle关闭句柄难道就没用?

没用
d52787790 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aa3000 的回复:]
是不是创建的进程不能自动关闭?

那个 Handle 不代表进程是否已经关闭, CloseHandle 也不能关闭进程。

可以用 GetExitCodeProcess 来判断进程是否已经关闭
[/Quote]

肯定是会自动关闭的,因为只有到连接数不够时才会出现进程不退出的情况。平时连的少的话是正常的。

CloseHandle关闭句柄难道就没用? TerminateProcess不太安全吧?
mcaok 2010-05-28
  • 打赏
  • 举报
回复
TerminateProcess
fishion 2010-05-28
  • 打赏
  • 举报
回复
关闭进程要用TerminateProcess
shenyi0106 2010-05-28
  • 打赏
  • 举报
回复

CloseHandle(pi.hProcess);

不是关进程的,它只是把进程的句柄给关了
关进程是
TerminateProcess
aa3000 2010-05-28
  • 打赏
  • 举报
回复
是不是创建的进程不能自动关闭?

那个 Handle 不代表进程是否已经关闭, CloseHandle 也不能关闭进程。

可以用 GetExitCodeProcess 来判断进程是否已经关闭

15,471

社区成员

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

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