【问题标题】:How to terminate child processes when a c# console application is aborted?c# 控制台应用程序中止时如何终止子进程?
【发布时间】:2010-01-28 06:08:14
【问题描述】:

我有一个控制台应用程序,它使用 WMI ManagementClass 生成其他 win32 进程。当用户通过 proc explorer 或按 ctrl+c 终止控制台应用程序时,我有一个要求,应用程序应该终止它创建的所有子进程。什么是实现这一目标的最佳方法吗?

【问题讨论】:

    标签: c# process wmi console-application


    【解决方案1】:

    请记住,您必须考虑到您的需求,您可以像下面的示例一样进行操作。

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    namespace KillSpawnedProcesses
    {
        class Program
        {
            static List<int> _processes = new List<int>();
    
            static void Main(string[] args)
            {
                Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
    
                StartProcesses();
                Console.Read(); //to hold up console
                Console.Read(); //to hold up console
            }
    
            static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
            {
                KillProcesses();
            }
    
            static void StartProcesses()
            {
                for(int i = 0; i < 2; i++)
                {
                    Process p = new Process();
                    p.StartInfo = new ProcessStartInfo();
                    p.StartInfo.FileName = "Notepad.exe";
                    p.Start();
                    _processes.Add(p.Id);
                }
            }
    
            static void KillProcesses()
            {
                foreach(var p in _processes)
                {
                    Process tempProcess = Process.GetProcessById(p);
                    tempProcess.Kill();
                }            
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果子进程有消息队列(Win32消息泵送),你可以将WM_CLOSE发布到它的主窗口,或者定义你自己的消息。否则,您可以使用套接字、管道或同步对象(如事件)来设计进程间通知。

      最糟糕的方法是杀死子进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多