2010-01-28 139 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對象(如事件)來設計進程間通知。

最糟糕的方法是殺死子進程。

相關問題