C#结束进程树

来源:互联网 发布:python genetic 编辑:程序博客网 时间:2024/05/01 02:37

ManagementObjectSearcher在System.Management命名空间中。

public static class ProcessEx

    {
        /// <summary>
        /// 结束进程树
        /// </summary>
        /// <param name="parent">父进程</param>
        public static void KillProcessTree(this Process parent)
        {
            var searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + parent.Id);
            var moc = searcher.Get();
            foreach (ManagementObject mo in moc)
            {
                Process childProcess = Process.GetProcessById(Convert.ToInt32(mo["ProcessID"]));//通过子进程ID获取该进程实例
                childProcess.KillProcessTree();//调用拓展方法结束当前进程的所有子进程
            }
            Console.WriteLine(string.Format("kill process by id {0}!", parent.Id));
            //不能结束自己
            if(parent.Id != Process.GetCurrentProcess().Id)
                parent.Kill();//结束当前进程
        }
        /// <summary>
        /// 结束指定进程和它的进程树(所有子进程)
        /// </summary>
        /// <param name="pid">进程Id</param>
        public static void KillProcessTreeById(int pid)
        {
            try
            {
                var process = Process.GetProcessById(pid);//获取当前进程
                try
                {
                    process.KillProcessTree();//结束进程树
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            catch
            {
                Console.WriteLine("failed to get the process!");
                var searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);
                var moc = searcher.Get();
                foreach (ManagementObject mo in moc)
                {
                    Process childProcess = Process.GetProcessById(Convert.ToInt32(mo["ProcessID"]));//通过子进程ID获取该进程实例
                    childProcess.KillProcessTree();//调用拓展方法结束当前进程的所有子进程
                }
            }
        }
    }
0 0
原创粉丝点击