1)使用GetExitCodeProcess()2)使用Createtoolhelp32Snapshot()遍历进程列表并检查PID
现在,在这两种情况下,我仍然得到一个终止TerminateProcess的过程,直到现在还没有。
有没有一种方法可以肯定地知道一个过程是否还活着或者没有通过PID? 谢谢!
在Windows 8机器上安装Cairo和Canvas
我怎样才能像在Linux上一样,在windows系统上的python-dev中安装软件包?
应用程序内存使用跟踪
作为一种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吗? 有枚举系统上所有正在运行的进程的函数 – 这可以帮助你。