确定一个进程是否死了 – 通过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吗? 有枚举系统上所有正在运行的进程的函数 – 这可以帮助你。

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...