我有一個控制檯應用程序,使用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. 如何禁止在寫入文件時終止應用程序