栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

如何在C# 中查找或结束程序域中的主、子进程

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在C# 中查找或结束程序域中的主、子进程

有时候,我们的程序需要启动一些子进程,如嵌入的图形程序。

当启动一个进程后,获得这个进程信息Process,然后其内部在某个时刻启动了一个子进程,这个时候就涉及程序域和进程树的概念。当我们通过非正常操作的方式结束前面获得的进程信息Process时(如Kill掉),可能并没有实际结束子进程。因为当有主进程启动了子进程后,所有的进程实际上是被放在程序域中运行的(winform的Program文件中的Application域中),而结束的仅仅是域中的某个进程。当然,如果我们正常推出主进程,实际上Application在推出时,做了很多操作,以结束整个域中的信息;如果采用捕捉的Process结束,Application并没有完全执行退出(使用Application的Exit事件,可以检验)。

如果要完全退出相关进程,就需要查找主进程下的所有子进程,并结束所有进程:

/// 
 /// 结束进程和相关的子进程
 /// 
 /// 需要结束的进程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)
   {
     
   }
 }

查找进程ID的方法:

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

其中,以上代码需要先引入System.Management.dll(在framework中找到相关引用);再引入命令空间:System.Management;

以上就是如何在C# 中查找或结束程序域中的主、子进程的详细内容,更多关于c# 程序域的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号