在使用Python的Windows中,如何终止我的进程?

时间:2011-02-25 04:57:42

标签: python windows winapi pywin32

编辑:看起来像是重复,但我向你保证,事实并非如此。我希望彻底杀死当前正在运行的进程,而不是杀死一个单独的进程。

问题是我正在查杀的进程不是由子进程或exec生成的。它基本上是在试图自杀。

这是场景:程序在退出时进行清理,但有时这需要太长时间。我确信我可以终止程序,因为退出的第一步保存了数据库。我该怎么做呢?

  • 无法使用taskkill,因为它在某些Windows安装中不可用,例如家庭版的XP
  • tskill也不起作用

  • win32api.TerminateProcess(句柄,0)工作,但我担心它可能会导致内存泄漏,因为我没有机会关闭句柄(程序立即停止后)调用TerminateProcess)。注意:是的,我强行退出它,所以肯定有一些不同意的资源,但我想尽可能地减少这个(因为我只会在它花费了无法忍受的时间,以便更好的用户时才这样做)经验)但我不认为python会处理gc,如果它是强制退出。

我正在做最后一个,因为它正常工作。我很关心不一致的手柄。任何想法/建议将非常感谢!

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你就试图让程序自行关闭。这通常使用sys.exit()完成。

答案 1 :(得分:1)

  

win32api.TerminateProcess(handle,0)   工作,但我担心它可能会导致   内存泄漏因为我没有   有机会关闭手柄   (程序立即停止   调用TerminateProcess)。注意:是的,   我强行戒掉它,所以有   必然是一些不确定的资源,   但我想尽量减少这个   可能(因为我只会这样做   这是令人难以忍受的   时间,为了更好的用户体验)但是   我不认为python会处理gc if   这是强行退出。

如果进程自行终止,那么您不必担心垃圾回收。操作系统将自动清理该进程使用的所有内存资源,因此您不必担心内存泄漏。内存泄漏是指进程正在运行并随着时间的推移使用越来越多的内存。

所以,以这种方式终止你的过程不是很“干净”,但不会有任何不良的副作用。

答案 2 :(得分:1)

TerminateProcess和taskkill / f不会释放资源,并且会导致内存泄漏。 这是terminateProcess上的MS引用: {...终止进程不会导致子进程终止。 终止进程不一定会从系统中删除进程对象。关闭进程的最后一个句柄时,将删除进程对象。 ...}    MS大量使用COM和DCOM,它们共享操作系统不能跟踪和无法跟踪的句柄和资源。如果您不打算经常重新启动,则应使用ExitProcess。这允许进程正确地释放它使用的资源。 Linux没有这个问题,因为它不使用COM或DCOM。