微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

确定一个进程是否死了 – 通过PID

我有两种不同的方法来检查一个进程是否还在运行:

1)使用GetExitCodeProcess()2)使用Createtoolhelp32Snapshot()遍历进程列表并检查PID

现在,在这两种情况下,我仍然得到一个终止TerminateProcess的过程,直到现在还没有。

有没有一种方法可以肯定地知道一个过程是否还活着或者没有通过PID? 谢谢!

在Windows 8机器上安装Cairo和Canvas

我怎样才能像在Linux上一样,在windows系统上的python-dev中安装软件包?

哪个是最好的函数在C + +转换SID帐户用户名

应用程序内存使用跟踪

如何检查PHP是否支持multi_curl?

作为一种types的function?

如何强制Java进程退出热点崩溃

LoadImage基于win颜色设置工作不同

打开问题 – 太多打开的文件

Python复制文件:IOError:权限被拒绝

对GetExitCodeProcess的调用应该为活动进程返回STILL_ACTIVE 。 在调用TerminateProcess ,进程将会死亡,并返回一个不同的值。

另一种检查进程是否活着的方法是WaitForSingleObject 。 如果在进程句柄上用超时值0调用它,如果进程仍在运行,它将立即返回WAIT_TIMEOUT 。

不要使用这样的PID。 PID被重用并且具有非常窄的范围,具有非常高的碰撞概率。 换句话说,你会发现一个正在运行的过程,但将是一个不同的过程。

你不能假定一个低层次的API调用功能就像它的名字或者高级描述一样。 内核仍然有一些事情要做,而且通常调用只是对内核的请求,内核需要做很多事情(取决于实现),然后才会真正释放PID。 在这种情况下,在您发出呼叫之后,您可能会认为该进程已经死亡,但是内核仍然需要清理。

来自MSDN:

TerminateProcess函数用于无条件地导致进程退出。 如果使用TerminateProcess而不是ExitProcess,动态链接库(DLL)维护的全局数据的状态可能会受到影响。

TerminateProcess立即启动终止并返回。 这会停止进程内所有线程的执行,并请求取消所有未决的I / O。 被终止的进程不能退出,直到所有待处理的I / O完成或取消。

一个进程不能阻止自己被终止。

你可以使用Process Status API吗? 有枚举系统上所有正在运行的进程的函数 – 这可以帮助你。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐