最近在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了


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐