Csharp/C#教程:如何在C# 中查找或结束程序域中的主、子进程分享

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

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

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

///<summary> ///结束进程和相关的子进程 ///</summary> ///<paramname="pid">需要结束的进程ID</param> publicstaticvoidKillProcessAndChildren(intpid) { ManagementObjectSearchersearcher=newManagementObjectSearcher("Select*FromWin32_ProcessWhereParentProcessID="+pid); ManagementObjectCollectionmoc=searcher.Get(); foreach(ManagementObjectmoinmoc) { KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); } try { Processproc=Process.GetProcessById(pid); Console.WriteLine(pid); proc.Kill(); } catch(ArgumentException) { /*processalreadyexited*/ } }

查找进程ID的方法:

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

其中,上述就是C#学习教程:如何在C# 中查找或结束程序域中的主、子进程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/903678.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐