zoukankan      html  css  js  c++  java
  • 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强制关闭进程,方法如下:

     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;
            }
    

      

  • 相关阅读:
    怎样获取当前文档的域名
    怎样获取当前网页的URL
    怎样获取所有style节点
    怎样获取所有的script节点
    怎样获取所有的embed节点对象
    怎样获取页面中的所有图片节点
    怎样获取页面中的表单元素节点
    怎样获取页面中所有带href属性的标签集合
    怎样获取当前页面内的全屏状态的元素节点
    怎样获取当前页面的焦点聚焦元素节点
  • 原文地址:https://www.cnblogs.com/shanlin/p/3620791.html
Copyright © 2011-2022 走看看