C#下查找并杀死子进程(进程树)

最近在WPF程序里面启动一个java编写的应用程序,因为java编写的程序运行的时候需要运行虚拟机,所以在关闭的时候要将程序和虚拟机一起kill才可以,但是如果没有办法找到java程序对应的虚拟机,将所有虚拟机都杀死的话,可能误杀其他程序的虚拟机,在网上找了一个,方法如下:(http://www.bubuko.com/infodetail-848066.html)

参考:如何杀死进程及子进程

/**
 * 传入参数:父进程id
 * 功能:根据父进程id,杀死与之相关的进程树
 */
public static void KillProcessAndChildren(int pid)
{
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);
     ManagementObjectCollection moc = searcher.Get();
     foreach (ManagementObject mo in moc)
     {
         KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
     }
     try
     {
         Process proc = Process.GetProcessById(pid);
         Console.WriteLine(pid);
         proc.Kill();
     }
     catch (ArgumentException)
     { 
        /* process already exited */
     }
}

  常用的Process方法:

//1.根据进程id,获得进程
Process p = Process.GetProcessById(100);
//2.获取当前进程
Process p = Process.GetCurrentProcess();
//3.根据进程名字获取进程,返回的结果是一个数组
Process p = (Process.GetProcessesByName("DriverEasy"))[0];

  

      特别声明:因为代码中使用到了 ManagementObjectSearcher,如果在Visual Studio中即使引入了

                   命名空间,还是提示无法找到相应的类的话,那么按下面说的来做,

                   第一步:在项目上鼠标右键 -> add -> Reference

                            技术分享

                      第二步:找到 System.Management,把它前面的勾打上

                           技术分享

                 OK了


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值