C#利用ntsd.exe关闭进程
有时我们会发现在任务管理器中无法关闭某个进程,可以使用下面的方法强行关闭,注意不要杀掉进程表中的系统核心进程:
1.使用Windows XP/2000自带的工具
从Windows 2000开始,Windows系统就自带了一个用户态调试工具Ntsd,它能够杀掉大部分进程,因为被调试器附着的进程会随调试器一起退出,所以只要你在命令行下使用Ntsd调出某进程,然后退出Ntsd即可终止该进程,而且使用Ntsd会自动获得Debug权限,因此Ntsd能杀掉大部分的进程。
操作方法:单击“开始”/程序/附件/命令提示符,输入命令:ntsd -c q -p PID(把最后那个PID,改成你要终止的进程的PID)。
以上参数-p表示后面跟随的是进程PID, -c q表示执行退出Ntsd的调试命令,从命令行把以上参数传递过去就行了。
2. 使用专门的软件来杀进程
任务管理器杀不掉的进程,你可以使用专门的软件关闭。
下面是使用C#程序调用ntsd强制关闭进程,方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | public static bool KillProcess( string name, int id, string ntsdPath) { bool result = false ; //判断进程是否运行的标识 Process[] proArr = null ; if (name == null ) name = "" ; name = name.Replace( ".EXE" , "" ).Replace( ".exe" , "" ); try { using (Process process = new Process()) { process.StartInfo.FileName = "cmd.exe" ; process.StartInfo.UseShellExecute = false ; process.StartInfo.RedirectStandardOutput = true ; process.StartInfo.RedirectStandardError = true ; process.StartInfo.CreateNoWindow = true ; try { if (id == 0 && (name + "" ).Length > 0) { proArr = Process.GetProcessesByName(name); if (proArr.Length > 0 && (ntsdPath + "" ).Length > 0) { foreach (Process pr in proArr) { //process.StandardInput.WriteLine(ntsdPath + " -c q -p " + pr.Id);//直接结束进程ID process.StartInfo.Arguments = "/c " + ntsdPath + " -c q -p " + pr.Id; process.Start(); } } } else { process.StartInfo.Arguments = "/c " + ntsdPath + " -c q -p " + id; process.Start(); } } catch (Exception) { } } //关闭ntsd.exe proArr = Process.GetProcessesByName( "ntsd" ); foreach (Process pr in proArr) { pr.Kill(); result = true ; } //使用kill if ((name + "" ).Length > 0) { proArr = Process.GetProcessesByName(name); foreach (Process pr in proArr) { pr.Kill(); result = true ; } } } catch (Exception ex) { TxtLog.InsertLog(ex, "Helper KillProcess" ); } return result; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?