欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#結束進程及子進程

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

這是個我在C#調用批處理文件時遇到的問題。首先我通過Process.Start方法調用一個批處理文件,那個批處理文件里面則調用了一大堆程序。當退出C#程序時,我在程序中結束殺掉了那個批處理文件的Process,但是,那個批處理所調用的子進程卻無法像直接調用批處理文件那樣隨著批處理文件的進程一起被殺掉,而是自動向上提升成為了獨立的進程。

在網上查了一下,可以通過NtQueryInformationProcess函數查詢子進程的信息,并同時也查到了一段殺掉進程及所有子進程的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ā)現NtQueryInformationProcess函數在x64位程序上運行無效, 具體原因不明,Google了一下也沒有找到答案,反而找到了另一種解決方案,通過WMI來實現的。在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 */
    }
}

到此這篇關于C#結束進程及子進程的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#?變量,常量數據類型詳情

    C#?變量,常量數據類型詳情

    這篇文章主要介紹了C#?變量,常量數據類型詳情,常量是指在程序運行中不能改變的數據,定義一個常量與定義一個變量過程類似,只是多加一個關鍵詞const
    2022-07-07
  • C#使用命名管道Pipe進行進程通信實例詳解

    C#使用命名管道Pipe進行進程通信實例詳解

    這篇文章主要介紹了C#使用命名管道Pipe進行進程通信實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • C#用遞歸算法解決八皇后問題

    C#用遞歸算法解決八皇后問題

    在軟件編程中,這種思路確是一種解決問題最簡單的算法,它通過一種類似于蠻干的思路,一步一步地往前走,每走一步都更靠近目標結果一些,直到遇到障礙物,我們才考慮往回走。
    2016-06-06
  • 詳解C#如何實現一個安全的事件訂閱器

    詳解C#如何實現一個安全的事件訂閱器

    事件訂閱器是一個對象,它訂閱(或監(jiān)聽)某個事件,并在事件發(fā)生時執(zhí)行相應的操作,本文主要介紹了C#實現一個安全的事件訂閱器的相關知識,感興趣的可以了解下
    2024-01-01
  • C#實現的簡單隨機數產生器功能示例

    C#實現的簡單隨機數產生器功能示例

    這篇文章主要介紹了C#實現的簡單隨機數產生器功能,涉及C#簡單界面布局、事件響應及隨機數生成相關操作技巧,需要的朋友可以參考下
    2017-09-09
  • C#操作DataGridView獲取或設置當前單元格的內容

    C#操作DataGridView獲取或設置當前單元格的內容

    這篇文章介紹了C#操作DataGridView獲取或設置當前單元格的內容,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#加密解密類實例程序

    C#加密解密類實例程序

    這篇文章主要介紹了C#加密解密類實例程序,大家參考使用吧
    2013-12-12
  • C#自定義Attribute值的獲取與優(yōu)化技巧

    C#自定義Attribute值的獲取與優(yōu)化技巧

    C#自定義Attribute值的獲取是開發(fā)中會經常用到的,大家通常使用反射進行獲取的,代碼也很簡單,今天通過本文給大家講解C#?Attribute值獲取方法,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • C#實現Word轉換TXT的方法詳解

    C#實現Word轉換TXT的方法詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現Word轉換TXT的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#連接SQL Server的實現方法

    C#連接SQL Server的實現方法

    這篇文章主要給大家介紹了關于C#連接SQL Server的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12

最新評論