Kill进程(windows 8)问题
本文关键字:问题 windows 进程 Kill | 更新日期: 2023-09-27 17:49:28
我安装了Windows 8大约一个月前,一直有问题,当一个进程挂起时,我无法结束/杀死它。任务管理器和CMD Taskkill/f/PID ####都不能完成这项工作,所以我想我应该用c#写一个我自己的进程杀手,看看会出现什么问题。
在写完一个小应用程序后,我意识到我并不像我想象的那么聪明——我仍然无法结束这个过程。起初,我能够通过名称/PID:
找到进程。Process p = Process.GetProcessById(aPid)
//or
foreach (Process p in Process.GetProcessesByName(aProcessName)
. .当我尝试:
时,得到"访问被拒绝"异常。process.Kill();
. .经过几次尝试后,情况发生了变化,我再也找不到这个过程了。如。当我试图通过名称或PID找到它时,没有返回任何内容,而该进程仍然保留在任务管理器和我的屏幕上。
我也阅读了进程@MSDN,它说如果进程已经终止或无法终止,则可以抛出"拒绝访问"。(
帮助吗?真的没有办法强制结束进程吗?
那么,您实际上遇到了阻止任务管理器终止进程的相同问题。有两个可能的原因。一个与拒绝访问异常相关联,该进程可能已经删除了对其他进程的访问权限,以获取该进程的句柄。因为你在Windows 8上运行,所以你安装了。net 4.5。它为Process类提供了一个新方法,您可以调用EnterDebugMode()
。这使得SeDebugPrivilege
,现在可能足以使Kill()
工作。
另一个是一个更大的问题,进程可能有一个线程在内核模式下活动,但没有退出。最好的诊断方法是使用任务管理器,详细信息选项卡,右键单击其中一个列标题,然后选择"选择列"。蜱虫"处理"。查看进程显示的值。如果您看到非零值,则该进程很可能打开了句柄,正在等待设备驱动程序执行I/O请求。并且该设备驱动程序不受Windows请求它取消请求的影响。缩小麻烦制造者的范围并不容易,您必须更确切地了解您的进程执行的是哪种I/O请求。在superuser.com