2010-01-28 67 views
1

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

回答

3

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

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(); 
      }    
     } 
    } 
} 
0

如果子过程中有一个消息队列(Win32的消息泵送),你可以张贴WM_CLOSE到其主窗口,或定义自己的消息。否则,您可以使用Sockets,Pipes或Synchronization对象(如事件)来设计进程间通知。

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

相关问题