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