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

 更新时间:2020年11月09日 08:36:30   作者:一只独行的猿  
这篇文章主要介绍了如何在C# 中查找或结束程序域中的主、子进程,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下

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

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

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

/// <summary>
 /// 结束进程和相关的子进程
 /// </summary>
 /// <param name="pid">需要结束的进程ID</param>
 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 */
   }
 }

查找进程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# 程序域的资料请关注脚本之家其它相关文章!

相关文章

  • C# 调用外部exe的三种方式

    C# 调用外部exe的三种方式

    调用外部exe是常用的功能,本文主要介绍了C# 调用外部exe的三种方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • C#使用DoddleReport快速生成报表

    C#使用DoddleReport快速生成报表

    这篇文章介绍了C#使用DoddleReport快速生成报表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#使用虚拟方法实现多态

    C#使用虚拟方法实现多态

    这篇文章主要介绍了C#使用虚拟方法实现多态,涉及C#多态的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • C#遍历文件夹获取指定后缀名文件

    C#遍历文件夹获取指定后缀名文件

    这篇文章主要为大家详细介绍了C#遍历文件夹获取指定后缀名文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 利用C#操作WMI指南

    利用C#操作WMI指南

    WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,可以在有大量的应用程序、服务和设备的系统中提供全方位的管理功能。它允许应用程序的开发者,使用简单的、一致的机制,去查询企业中的任一台计算机上的信息,或是进行系统配置
    2016-11-11
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    之前一篇文章介绍的是使用Python的jieba、wordcloud的库生成词云图,本文则介绍在C#中如何使用jieba.NET、WordCloudSharp库生成词云图,感兴趣的朋友一起看看吧
    2021-07-07
  • unity3d实现七天签到功能

    unity3d实现七天签到功能

    这篇文章主要为大家详细介绍了unity3d实现七天签到功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • c#实现几种数据库的大数据批量插入

    c#实现几种数据库的大数据批量插入

    这篇文章主要介绍了c#实现几种数据库的大数据批量插入,主要包括SqlServer、Oracle、SQLite和MySQL,有兴趣的可以了解一下。
    2017-01-01
  • Visual Stodio2022中没有mysql.dll的解决办法

    Visual Stodio2022中没有mysql.dll的解决办法

    这篇文章介绍了Visual Stodio2022中没有mysql.dll的解决办法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C#利用缓存分块读写大文件

    C#利用缓存分块读写大文件

    这篇文章主要为大家详细介绍了C#利用缓存分块读写大文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论