如何在C# 中查找或結(jié)束程序域中的主、子進(jìn)程
有時(shí)候,我們的程序需要啟動一些子進(jìn)程,如嵌入的圖形程序。
當(dāng)啟動一個(gè)進(jìn)程后,獲得這個(gè)進(jìn)程信息Process,然后其內(nèi)部在某個(gè)時(shí)刻啟動了一個(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)程啟動了子進(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)啟動,關(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#發(fā)送HttpPost請求來調(diào)用WebService的方法
在C#中發(fā)送HttpPost請求來調(diào)用WebService中的MyAction方法,代碼如下:需要的朋友可以參考一下2013-03-03
C#使用log4net結(jié)合sqlite數(shù)據(jù)庫實(shí)現(xiàn)記錄日志
因?yàn)榻Y(jié)構(gòu)化的數(shù)據(jù)庫存儲的日志信息,可以寫專門的軟件讀取歷史日志信息,通過各種條件篩選,可操作性極大增強(qiáng),有這方面需求的開發(fā)人員可以考慮,本文給大家介紹了C#使用log4net結(jié)合sqlite數(shù)據(jù)庫記錄日志,需要的朋友可以參考下2024-10-10
C#?wpf定義ViewModelBase進(jìn)行簡化屬性綁定
綁定機(jī)制是wpf的核心,也是界面獨(dú)立的根本,尤其是使用了mvvm模式,本文主要介紹了wpf如何定義ViewModelBase進(jìn)行簡化屬性綁定,需要的可以參考下2024-04-04

