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

      

  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/shanlin/p/3620791.html
Copyright © 2011-2022 走看看