我有一个控制台应用程序,它使用WMI ManagementClass生成其他win32进程。我有一个要求,当用户通过proc explorer杀死控制台应用程序或按ctrl + c时,应用程序应该终止它创建的所有子进程。是实现这个目标的最好方法吗?
答案 0 :(得分: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();
}
}
}
}
答案 1 :(得分:0)
如果子进程有一个消息队列(Win32消息泵送),您可以将WM_CLOSE发布到其主窗口,或定义您自己的消息。否则,您可以使用套接字,管道或同步对象(如事件)来设计进程间通知。
最糟糕的方法是杀死子流程。