最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#結(jié)束進(jìn)程及子進(jìn)程

 更新時(shí)間:2022年06月17日 14:26:57   作者:天方  
這篇文章介紹了C#操作結(jié)束進(jìn)程及子進(jìn)程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

這是個(gè)我在C#調(diào)用批處理文件時(shí)遇到的問題。首先我通過Process.Start方法調(diào)用一個(gè)批處理文件,那個(gè)批處理文件里面則調(diào)用了一大堆程序。當(dāng)退出C#程序時(shí),我在程序中結(jié)束殺掉了那個(gè)批處理文件的Process,但是,那個(gè)批處理所調(diào)用的子進(jìn)程卻無法像直接調(diào)用批處理文件那樣隨著批處理文件的進(jìn)程一起被殺掉,而是自動(dòng)向上提升成為了獨(dú)立的進(jìn)程。

在網(wǎng)上查了一下,可以通過NtQueryInformationProcess函數(shù)查詢子進(jìn)程的信息,并同時(shí)也查到了一段殺掉進(jìn)程及所有子進(jìn)程的C#代碼,有需要的朋友可以參考一下。

    static class ProcessExtend
    {
        // [StructLayout(LayoutKind.Sequential)]
        private struct ProcessBasicInformation
        {
            public int ExitStatus;
            public int PebBaseAddress;
            public int AffinityMask;
            public int BasePriority;
            public uint UniqueProcessId;
            public uint InheritedFromUniqueProcessId;
        }

        [DllImport("ntdll.dll")]
        static extern int NtQueryInformationProcess(
           IntPtr hProcess,
           int processInformationClass /* 0 */,
           ref ProcessBasicInformation processBasicInformation,
           uint processInformationLength,
           out uint returnLength
        );

        public static void KillProcessTree(this Process parent)
        {
            var processes = Process.GetProcesses();
            foreach (var p in processes)
            {
                var pbi = new ProcessBasicInformation();
                try
                {
                    uint bytesWritten;
                    if (NtQueryInformationProcess(p.Handle, 0, ref pbi, (uint)Marshal.SizeOf(pbi), out bytesWritten) == 0) // == 0 is OK
                        if (pbi.InheritedFromUniqueProcessId == parent.Id)
                            using (var newParent = Process.GetProcessById((int)pbi.UniqueProcessId))
                                newParent.KillProcessTree();
                }
                catch { }
            }
            parent.Kill();
        }
    }

PS:今天發(fā)現(xiàn)NtQueryInformationProcess函數(shù)在x64位程序上運(yùn)行無效, 具體原因不明,Google了一下也沒有找到答案,反而找到了另一種解決方案,通過WMI來實(shí)現(xiàn)的。在x86和x64下都可以使用。

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 */
    }
}

到此這篇關(guān)于C#結(jié)束進(jìn)程及子進(jìn)程的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡(jiǎn)單聊聊C#的線程本地存儲(chǔ)TLS到底是什么

    簡(jiǎn)單聊聊C#的線程本地存儲(chǔ)TLS到底是什么

    C#的ThreadStatic是假的,因?yàn)镃#完全是由CLR(C++)承載的,言外之意C#的線程本地存儲(chǔ),用的就是用C++運(yùn)行時(shí)提供的 __declspec(thread)或__thread來虛構(gòu)的一套玩法,下面我們就來深入講講C#的線程本地存儲(chǔ)TLS到底是什么吧
    2024-01-01
  • C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例,本文講解了IEnumerable一些知識(shí)并給出了一個(gè)簡(jiǎn)單的實(shí)現(xiàn),需要的朋友可以參考下
    2015-03-03
  • C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法

    C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#代碼延時(shí)的幾種實(shí)現(xiàn)

    C#代碼延時(shí)的幾種實(shí)現(xiàn)

    本文主要介紹了C#代碼延時(shí)的幾種實(shí)現(xiàn),主要介紹了三種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D光照效果

    C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D光照效果

    這篇文章主要為大家詳細(xì)介紹了如何利用C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D的光照效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C#代碼實(shí)現(xiàn)對(duì)AES加密解密

    C#代碼實(shí)現(xiàn)對(duì)AES加密解密

    這篇文章主要介紹了C#代碼實(shí)現(xiàn)對(duì)AES加密解密的相關(guān)資料,AES是一個(gè)新的可以用于保護(hù)電子數(shù)據(jù)的加密算法,需要的朋友可以參考下
    2015-12-12
  • DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法

    DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法

    這篇文章介紹了DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#操作FTP出現(xiàn)500錯(cuò)誤解決辦法

    C#操作FTP出現(xiàn)500錯(cuò)誤解決辦法

    最近在做項(xiàng)目的時(shí)候需要操作ftp進(jìn)行文件的上傳下載,但在調(diào)用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的時(shí)候總是出現(xiàn)"遠(yuǎn)程服務(wù)器返回錯(cuò)誤:(550)文件不可用(例如,未找到文件,無法訪問文件)"的異常
    2014-03-03
  • C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)

    C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)

    通常一個(gè)方法只能返回一個(gè)值,但是如果在某些時(shí)候,我們想要返回多個(gè)值,例如某個(gè)方法將一個(gè)浮點(diǎn)數(shù)分割成一個(gè)整數(shù)和一個(gè)小數(shù)返回,因此本文給大家介紹了C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法及示例代碼,需要的朋友可以參考下
    2024-05-05
  • WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口的示例詳解

    WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11

最新評(píng)論

阿拉善右旗| 辰溪县| 子洲县| 鹤岗市| 马山县| 安仁县| 永仁县| 安化县| 左云县| 罗定市| 平阳县| 阿坝县| 东宁县| 呈贡县| 曲沃县| 泌阳县| 扎囊县| 东阿县| 错那县| 喀什市| 汉源县| 海城市| 缙云县| 孝感市| 绵阳市| 玛曲县| 鄂托克旗| 长春市| 兴国县| 北京市| 达拉特旗| 上杭县| 邹平县| 惠安县| 赤壁市| 南汇区| 讷河市| 突泉县| 二连浩特市| 屏南县| 左云县|