【发布时间】:2013-12-19 07:57:00
【问题描述】:
真正终止进程最不优雅的方式是什么?
我尝试使用 Process.Kill (System.Diagnostics),但它有一个缺点,它对我来说毫无用处:
如果在进程当前终止时调用了 Kill 方法,则会为 Access Denied 引发 Win32Exception。
事实上,我正在处理一个应用程序(不是我的),它经常崩溃,甚至卡在终止进程中,只有重新启动才有帮助。
运行 TASKKILL /F /IM ... 也会以“拒绝访问”退出。我还尝试 P/Invoke TerminateProcess()。
虽然这个问题可能非常具体,但我会非常感谢您的回答。
【问题讨论】:
-
如果它已经被终止了,你认为告诉它再次终止会有所帮助的原因是什么?
-
您可以尝试杀死其各个线程。可能需要 P/Invoke。
-
Process.Kill 应该可以工作。您真的要停止服务吗?你想杀死什么应用程序。
-
终止进程只能卡在内核模式,例如如果有任何待处理的 I/O 未完成。一旦进程被标记为终止,在不危及内核状态完整性的情况下,就无法再做任何事情了。使用进程资源管理器和/或内核调试器来尝试找出有问题的应用程序究竟是在哪里卡在内核模式中。如果没有任何帮助,请将有问题的应用程序放在虚拟机中并将其关闭。
-
您已经使用了武器库中所有可用的武器。只重启机器更不优雅。