我有一个控制台应用程序,使用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到其主窗口,或定义自己的消息。否则,您可以使用Sockets,Pipes或Synchronization对象(如事件)来设计进程间通知。
最糟糕的方法是杀死子进程。
相关问题
- 1. 终止C#控制台应用程序
- 2. 父进程在C#中终止时如何终止子进程
- 3. 在c#中执行期间终止控制台应用程序
- 4. 如何在进程中断时终止控制台输入
- 5. 线程不在delphi的控制台应用程序中终止?
- 6. 防止终止控制台应用程序
- 7. 如何终止未关联进程的Windows控制台应用程序?
- 8. 后台进程在其父进程终止时被终止?
- 9. 如何创建不终止的控制台应用程序?
- 10. 如何在关闭它时终止控制台应用程序中的getchar
- 11. 控制台终止时的应用程序
- 12. 控制台应用程序关闭/终止时检测?
- 13. Ctrl-C如何终止子进程?
- 14. 如何终止控制台?
- 15. 如何停止C#控制台应用程序自动关闭?
- 16. 如何阻止C#控制台应用程序自动关闭?
- 17. 终止子进程
- 18. 如何在SIGINT时仅终止前台子进程?
- 19. 在VB6中创建子进程,当程序终止时自动终止
- 20. 以Java终止控制台应用程序
- 21. 如何获得控制台的进程id在C#控制台应用程序
- 22. 使用进程时程序不终止
- 23. 程序终止时用`exec`终止进程
- 24. 如何在ruby中控制器(启动/终止)后台进程(服务器应用程序)
- 25. C#控制台应用程序:防止Control-C被打印?
- 26. 如何在c中终止程序?
- 27. 强制后台应用程序在iOS模拟器中终止
- 28. C/C++程序在UNIX中终止父进程的所有子进程?
- 29. 如何在后台进程在Perl中终止时通知我?
- 30. 如何禁止在写入文件时终止应用程序