精华内容
下载资源
问答
  • windows下关闭进程树

    2018-12-11 09:55:00
    关闭进程树,需要遍历给定进程下的所有子进程,这个过程可以用并查集来做。  1、编写获取进程父进程的代码   #define ProcessBasicInformation 0 typedef struct { DWORD ExitStatus; DWORD ...

      关闭进程需要特定权限,如果你程序权限不够也会导致关闭进程失败。关闭进程树,需要遍历给定进程下的所有子进程,这个过程可以用并查集来做。

        1、编写获取进程父进程的代码

        

    #define ProcessBasicInformation 0  
    
    typedef struct  
    {  
        DWORD ExitStatus;  
        DWORD PebBaseAddress;  
        DWORD AffinityMask;  
        DWORD BasePriority;  
        ULONG UniqueProcessId;  
        ULONG InheritedFromUniqueProcessId;  
    }   PROCESS_BASIC_INFORMATION;  
    
    typedef LONG (__stdcall *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);
    
    DWORD GetParentProcessID(DWORD dwProcessId)
    {
        LONG                        status;
        DWORD                        dwParentPID = (DWORD)-1;
        HANDLE                        hProcess;
        PROCESS_BASIC_INFORMATION    pbi;
    
        PROCNTQSIP NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(  
            GetModuleHandle("ntdll"), "NtQueryInformationProcess"); 
    
        if(NULL == NtQueryInformationProcess)
        {
            return (DWORD)-1;
        }
        // Get process handle
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE, dwProcessId);
        if (!hProcess)
        {
            return (DWORD)-1;
        }
    
        // Retrieve information
        status = NtQueryInformationProcess( hProcess,
            ProcessBasicInformation,
            (PVOID)&pbi,
            sizeof(PROCESS_BASIC_INFORMATION),
            NULL
            );
    
        // Copy parent Id on success
        if  (!status)
        {
            dwParentPID = pbi.InheritedFromUniqueProcessId;
        }
    
        CloseHandle (hProcess);
    
        return dwParentPID;
    
    }
    View Code

     

          2、并查集find的代码

        

    DWORD FindParentPID(std::map<DWORD,DWORD>& mapPPID,DWORD dwParentPID)
    {
        if(mapPPID.find(dwParentPID) == mapPPID.end() || mapPPID[dwParentPID]==dwParentPID)
            return dwParentPID;
        DWORD root = FindParentPID(mapPPID,mapPPID[dwParentPID]);
        mapPPID[dwParentPID] = root;
        return root;
    }

     

          3、通过进程id来结束进程树代码

      

    BOOL StopProcessTree(DWORD dwProcessID)
    {

        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32 info;
        info.dwSize = sizeof(PROCESSENTRY32);
        Process32First(handle, &info);
        std::map<DWORD,DWORD> mapPID; //key为进程id,val为根进程id。
        while (Process32Next(handle, &info) != FALSE)
        {
          DWORD dwPPID= GetParentProcessID(info.th32ProcessID); //找直接上一级的父进程
          if(info.th32ProcessID == dwProcessID)
          {
            mapPID[dwProcessID] = dwProcessID;
          }
          else if(dwPPID != (DWORD)-1)
          {
            mapPID[info.th32ProcessID] = dwPPID;
          }
        }
        ::CloseHandle(handle);

    
    

        BOOL bRet = TRUE;
        //使用并查集原理优化查询特定进程的进程树效率。
        for(std::map<DWORD,DWORD>::iterator iter = mapPID.begin();iter != mapPID.end();iter++)
        {
          DWORD dwTempPID = iter->first;
          if(FindParentPID(mapPID,dwTempPID)==dwProcessID)
          {
            HANDLE hProcess= OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwTempPID);
            bRet = TerminateProcess(hProcess,0)?bRet:FALSE;
            ::CloseHandle(hProcess);
          }
        }

        return bRet;

    }

     

               4、通过进程名来结束进程树

    BOOL StopProcessByName(LPCTSTR pszProcessName)
    {
            HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
            PROCESSENTRY32 info; 
            info.dwSize = sizeof(PROCESSENTRY32); 
            Process32First(handle, &info); 
            BOOL bRet = TRUE;
            while (Process32Next(handle, &info) != FALSE) 
            {
                CString csProcessName = pszProcessName;
                CString csExeFile = info.szExeFile; 
                if(csExeFile.CompareNoCase(csProcessName)==0)
                {
                    StopProcessTree(info.th32ProcessID);
                    break;
                }
            }
            ::CloseHandle(handle);
            return bRet;
    }

     

    转载于:https://www.cnblogs.com/jlyg/p/10100597.html

    展开全文
  • C#关闭进程树

    2015-07-01 09:32:03
    Windows并不维护进程间的父子关系链,而是提供了另外一个妥协的办法 - Job对象。你可以自己维护相关的多个进程,或把多个进程放入一个Job对象中,...关闭一个进程树,与之所有相关的进程也被关闭了;通常,Windows task
    Windows并不维护进程间的父子关系链,而是提供了另外一个妥协的办法 - Job对象。你可以自己维护相关的多个进程,或把多个进程放入一个Job对象中,以便统一管理。Windows task manager中"End Process" & "End Process Tree"分别对应kill掉一个单独的进程和一个进程树。关闭一个进程树,与之所有相关的进程也被关闭了;通常,Windows task manager中关闭一个父进程,其子进程不会被关闭(Windows并不维护进程间的父子关系链)。
     
    分析进程的工具Process explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
     
    可以通过以下代码来实现关闭一个进程树:
    [c-sharp] view plaincopy
    1. using System;  
    2. using System.Diagnostics;  
    3. using System.Globalization;  
    4. using System.Management;  
    5.   
    6. namespace xxx  
    7. {  
    8.     public static class ProcessesKiller  
    9.     {  
    10.         public static void FindAndKillProcess(int id)  
    11.         {  
    12.             killProcess(id);  
    13.         }  
    14.   
    15.         public static void FindAndKillProcess(string name)  
    16.         {  
    17.             foreach (Process clsProcess in Process.GetProcesses())  
    18.             {  
    19.                 if ((clsProcess.ProcessName.StartsWith(name, StringComparison.CurrentCulture)) || (clsProcess.MainWindowTitle.StartsWith(name, StringComparison.CurrentCulture)))  
    20.                     killProcess(clsProcess.Id);  
    21.             }  
    22.         }  
    23.   
    24.         private static bool killProcess(int pid)  
    25.         {  
    26.             Process[] procs = Process.GetProcesses();  
    27.             for (int i = 0; i < procs.Length; i++)  
    28.             {  
    29.                 if (getParentProcess(procs[i].Id) == pid)  
    30.                     killProcess(procs[i].Id);  
    31.             }  
    32.   
    33.             try  
    34.             {  
    35.                 Process myProc = Process.GetProcessById(pid);  
    36.                 myProc.Kill();  
    37.             }  
    38.             // process already quited  
    39.             catch (ArgumentException)  
    40.             {  
    41.                 ;  
    42.             }  
    43.   
    44.             return true;  
    45.         }  
    46.   
    47.         private static int getParentProcess(int Id)  
    48.         {  
    49.             int parentPid = 0;  
    50.             using (ManagementObject mo = new ManagementObject("win32_process.handle='" + Id.ToString(CultureInfo.InvariantCulture) + "'"))  
    51.             {  
    52.                 try  
    53.                 {  
    54.                     mo.Get();  
    55.                 }  
    56.                 catch (ManagementException)  
    57.                 {  
    58.                     return -1;  
    59.                 }  
    60.                 parentPid = Convert.ToInt32(mo["ParentProcessId"], CultureInfo.InvariantCulture);  
    61.             }  
    62.             return parentPid;  
    63.         }  
    64.     }  
    65. }  
    展开全文
  • 进程树的结构大概是这样的: A是父进程; B是A的子进程; B的下面可能有多个子进程C、D、E; B的子进程下面也有子进程F、G、H。。。 可能还有更多层的进程 [color=#0000FF]我们现在唯一可知道的是A和B的...
  • 小编给大家浅析win7系统结束进程树的方法,使用win7系统过程中,当你开启多个应用程序时,我们需要关闭,可通过结束进程树一次性关闭,感兴趣的用户,请来看看下面的操作方法吧。在桌面上开启了多个相同应用程序窗口...

    小编给大家浅析win7系统结束进程树的方法,使用win7系统过程中,当你开启多个应用程序时,我们需要关闭,可通过结束进程树一次性关闭,感兴趣的用户,请来看看下面的操作方法吧。

    在桌面上开启了多个相同应用程序窗口,就会在任务栏当中出现多个栏目,需要一次性关闭所有的同应用程序窗口,就需要结束进程树,那么win7电脑怎么结束进程树呢?就此问题,下面小编教你win7系统结束进程树的方法吧。

    怎么结束进程树:

    1、作为实例,打开许多记事本,启动任务管理器,可以看到有许多的进程,怎么快速的关闭呢;

    2e054a0b4f466ee59b2b3d73ceff2b1c.png

    2、右键单击转到进程;

    07916fd2ed8970a1d64a890b4272f491.png

    3、从这里可以看到这些进程的名称都是一样的,本篇讲到的方法就需要类是的情况才可以批量的关闭进程;

    46230cca77d24ec83b6107d42897a60d.png

    4、点击开始输入:cmd 按下Enter;如图所示:

    6fb8f898964ae72942aa9a157026d272.png

    5、打开命令提示符后输入:taskkill /f /im notepad.exe 这里的notepad.exe是进程的名称,具体需要关闭的自己查看,按Enter ;如图所示:

    83a366eda19ca556a639ca03b9687888.png

    6、显示关闭了所有的notepad进程,这就是批量关闭相同进程的方法。如图所示:

    ca3916063f0b96af4a6b8e6d59187967.png

    以上便是win7系统结束进程树的方法介绍了,如果用户们不知道电脑如何结束进程树,可以根据上述方法步骤进行操作

    展开全文
  • 小编给大家浅析win7系统结束进程树的方法,使用win7系统过程中,当你开启多个应用程序时,我们需要关闭,可通过结束进程树一次性关闭,感兴趣的用户,请来看看下面的操作方法吧。在桌面上开启了多个相同应用程序窗口...

    小编给大家浅析win7系统结束进程树的方法,使用win7系统过程中,当你开启多个应用程序时,我们需要关闭,可通过结束进程树一次性关闭,感兴趣的用户,请来看看下面的操作方法吧。

    在桌面上开启了多个相同应用程序窗口,就会在任务栏当中出现多个栏目,需要一次性关闭所有的同应用程序窗口,就需要结束进程树,那么win7电脑怎么结束进程树呢?就此问题,下面小编教你win7系统结束进程树的方法吧。

    怎么结束进程树:

    1、作为实例,打开许多记事本,启动任务管理器,可以看到有许多的进程,怎么快速的关闭呢;

    2d2ff8c84e8e4b6abc6ce5a5baddc6a6

    2、右键单击转到进程;

    3cd03276acfb4e11bd1a850d60de333e

    3、从这里可以看到这些进程的名称都是一样的,本篇讲到的方法就需要类是的情况才可以批量的关闭进程;

    8e281ce5ea8f482598f4652ebe40cb49

    4、点击开始输入:cmd 按下Enter;如图所示:

    3125e31b74904396a3419a4bb308a628

    5、打开命令提示符后输入:taskkill /f /im notepad.exe 这里的notepad.exe是进程的名称,具体需要关闭的自己查看,按Enter ;如图所示:

    4d15e4e08b3b488892182644527c4a39

    6、显示关闭了所有的notepad进程,这就是批量关闭相同进程的方法。如图所示:

    0d37dad319a14308b4faf2661349b06e

    以上便是win7系统结束进程树的方法介绍了,如果用户们不知道电脑如何结束进程树,可以根据上述方法步骤进行操作

    展开全文
  • 我有一个主程序A.exe,非常重要,需要确保运行...但是有个问题,如果用户打开任务管理器,以“关闭进程树”的方式可以同时关闭A.exe和B.exe。 请问,有什么办法可以阻止这种操作? 进程注入? 我用的VB6.0+WinXP
  • vmware-vmx.exe 右键关闭进程树 如果关闭不了 2、win10按住shift重启电脑,进入安全模式,找到VMware虚拟机安装目录,非vmware软件安装目录,比如我的D:\vmware\hadoop01 ,在安全模式下删除整个hadoop01文件夹,...
  • C#下查找并杀死子进程(进程树)

    千次阅读 2015-07-01 09:18:45
    最近在WPF程序里面启动一个java编写的应用程序,因为java编写的程序运行的时候需要运行虚拟机,所以在关闭的时候要将程序和虚拟机一起kill才可以,但是如果没有办法找到java程序对应的虚拟机,将所有虚拟机都杀死的...
  • 下面是具体代码 总共分为两个过程 ...KillProc 关闭某个程序的进程 procedure EnumProcTree(const PID: DWORD; out PID_Tree: TPIDTree); procedure ListTree(RootPID: DWORD); var hP_Root:...
  • 优雅的退出/关闭/重启gunicorn进程

    万次阅读 2018-02-28 18:11:25
    在工作中,会发现gunicorn启动的web服务,无论怎么使用kill -9 进程号都是无法杀...第一步获取Gunicorn进程树:通过执行如下命令,可以获取Gunicorn进程树:pstree -ap|grep gunicorn得到的结果如下Python | | |-...
  • 在工作中,会发现gunicorn启动的web服务,无论怎么使用kill -9 进程号都...第一步获取Gunicorn进程树: 通过执行如下命令,可以获取Gunicorn进程树: pstree -ap|grep gunicorn 得到的结果如下 | | |-grep,14519 --col
  • 怎么退出/关闭/重启gunicorn进程

    千次阅读 2019-03-10 14:11:27
    在工作中,会发现gunicorn启动的web服务,无论怎么使用kill -9 进程号都是无法杀死...获取Gunicorn进程树: pstree -ap|grep gunicorn 得到的结果如下 Python | | |-grep,14519 --color=auto gunicorn | -gunico...
  • 在工作中,会发现gunicorn启动的web服务,无论怎么...第一步获取Gunicorn进程树: 通过执行如下命令,可以获取Gunicorn进程树: pstree -ap|grep gunicorn 得到的结果如下: 重启Gunicorn任务 kill -HUP 85898 3...
  • php-fpm进程关闭与重启

    千次阅读 2017-03-01 13:43:58
    php-fpm进程关闭与重启 PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才...
  • cmd中无法杀死进程

    2020-03-06 12:53:18
    当我们在cmd中通过端口找到程序的pid却无法杀死进程时候...解决方法:先通过netstat -ano | findstr tomcat的端口号 查找到pid,然后再通过任务管理器中的详情那里找到对应的pid,右键关闭进程树即可(最简单的一种情况)...
  • 无论Windows 10打过多少补丁,...但有的时候会发现任务管理器并不能100%完成我们想要的工作,遇到一些系统进程或具有关联属性(进程树)的应用时,它就是“有心杀贼无力回天”了。等等,先不急着安装那些管家什么的,
  • PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。 现在我们可以在最新的PHP 5.3.2的源码里下载得到直接整合了PHP-FPM的分支...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 189
精华内容 75
关键字:

关闭进程树