编辑:看起来像是重复,但我向你保证,事实并非如此。我希望彻底杀死当前正在运行的进程,而不是杀死一个单独的进程。
问题是我正在查杀的进程不是由子进程或exec生成的。它基本上是在试图自杀。
这是场景:程序在退出时进行清理,但有时这需要太长时间。我确信我可以终止程序,因为退出的第一步保存了数据库。我该怎么做呢?
tskill也不起作用
win32api.TerminateProcess(句柄,0)工作,但我担心它可能会导致内存泄漏,因为我没有机会关闭句柄(程序立即停止后)调用TerminateProcess)。注意:是的,我强行退出它,所以肯定有一些不同意的资源,但我想尽可能地减少这个(因为我只会在它花费了无法忍受的时间,以便更好的用户时才这样做)经验)但我不认为python会处理gc,如果它是强制退出。
我正在做最后一个,因为它正常工作。我很关心不一致的手柄。任何想法/建议将非常感谢!
答案 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。