WMI ManagementClass를 사용하여 다른 win32 프로세스를 생성하는 콘솔 응용 프로그램이 있습니다. 사용자가 proc 탐색기를 통해 콘솔 응용 프로그램을 죽이거나 ctrl + c를 눌러 응용 프로그램이 생성 한 모든 자식 프로세스를 종료해야하는 요구 사항이 있습니다. 이것을 극복하는 가장 좋은 방법은?C# 콘솔 응용 프로그램이 중단 될 때 하위 프로세스를 종료하는 방법은 무엇입니까?
1
A
답변
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를 게시하거나, 당신의 자신의 메시지를 정의 할 수 있습니다. 그렇지 않으면 이벤트와 같은 소켓, 파이프 또는 동기화 개체를 사용하여 프로세스 간 알림을 디자인 할 수 있습니다.
가장 나쁜 방법은 하위 프로세스를 종료하는 것입니다.