如何在C# 中查找或結(jié)束程序域中的主、子進(jìn)程
有時(shí)候,我們的程序需要啟動(dòng)一些子進(jìn)程,如嵌入的圖形程序。
當(dāng)啟動(dòng)一個(gè)進(jìn)程后,獲得這個(gè)進(jìn)程信息Process,然后其內(nèi)部在某個(gè)時(shí)刻啟動(dòng)了一個(gè)子進(jìn)程,這個(gè)時(shí)候就涉及程序域和進(jìn)程樹的概念。當(dāng)我們通過非正常操作的方式結(jié)束前面獲得的進(jìn)程信息Process時(shí)(如Kill掉),可能并沒有實(shí)際結(jié)束子進(jìn)程。因?yàn)楫?dāng)有主進(jìn)程啟動(dòng)了子進(jìn)程后,所有的進(jìn)程實(shí)際上是被放在程序域中運(yùn)行的(winform的Program文件中的Application域中),而結(jié)束的僅僅是域中的某個(gè)進(jìn)程。當(dāng)然,如果我們正常推出主進(jìn)程,實(shí)際上Application在推出時(shí),做了很多操作,以結(jié)束整個(gè)域中的信息;如果采用捕捉的Process結(jié)束,Application并沒有完全執(zhí)行退出(使用Application的Exit事件,可以檢驗(yàn))。
如果要完全退出相關(guān)進(jìn)程,就需要查找主進(jìn)程下的所有子進(jìn)程,并結(jié)束所有進(jìn)程:
/// <summary> /// 結(jié)束進(jìn)程和相關(guān)的子進(jìn)程 /// </summary> /// <param name="pid">需要結(jié)束的進(jìn)程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 */ } }
查找進(jìn)程ID的方法:
//1.根據(jù)進(jìn)程id,獲得進(jìn)程 Process p = Process.GetProcessById(100); //2.獲取當(dāng)前進(jìn)程 Process p = Process.GetCurrentProcess(); //3.根據(jù)進(jìn)程名字獲取進(jìn)程,返回的結(jié)果是一個(gè)數(shù)組 Process p = (Process.GetProcessesByName("DriverEasy"))[0];
其中,以上代碼需要先引入System.Management.dll(在Framework中找到相關(guān)引用);再引入命令空間:System.Management;
以上就是如何在C# 中查找或結(jié)束程序域中的主、子進(jìn)程的詳細(xì)內(nèi)容,更多關(guān)于c# 程序域的資料請關(guān)注腳本之家其它相關(guān)文章!
- C#操作windows系統(tǒng)進(jìn)程的方法
- C#操作進(jìn)程的方法介紹
- C#獲取所有進(jìn)程的方法
- C#中進(jìn)程的掛起與恢復(fù)
- C#實(shí)現(xiàn)啟動(dòng),關(guān)閉與查找進(jìn)程的方法
- C#實(shí)現(xiàn)關(guān)閉其他程序窗口或進(jìn)程代碼分享
- C#實(shí)現(xiàn)強(qiáng)制關(guān)閉當(dāng)前程序進(jìn)程
- C#關(guān)閉指定名字進(jìn)程的方法
- C#實(shí)現(xiàn)查殺本地與遠(yuǎn)程進(jìn)程的方法
- C#操作windows系統(tǒng)進(jìn)程的方法
- C#結(jié)束進(jìn)程及子進(jìn)程
相關(guān)文章
C#中使用jieba.NET、WordCloudSharp制作詞云圖的步驟
之前一篇文章介紹的是使用Python的jieba、wordcloud的庫生成詞云圖,本文則介紹在C#中如何使用jieba.NET、WordCloudSharp庫生成詞云圖,感興趣的朋友一起看看吧2021-07-07c#實(shí)現(xiàn)幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入
這篇文章主要介紹了c#實(shí)現(xiàn)幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入,主要包括SqlServer、Oracle、SQLite和MySQL,有興趣的可以了解一下。2017-01-01Visual Stodio2022中沒有mysql.dll的解決辦法
這篇文章介紹了Visual Stodio2022中沒有mysql.dll的解決辦法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12