我有一個控制檯應用程序,使用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. 線程不在delphi的控制檯應用程序中終止?
- 3. 防止終止控制檯應用程序
- 4. 如何終止未關聯進程的Windows控制檯應用程序?
- 5. 後臺進程在其父進程終止時被終止?
- 6. 如何創建不終止的控制檯應用程序?
- 7. 如何在關閉它時終止控制檯應用程序中的getchar
- 8. Ctrl-C如何終止子進程?
- 9. 如何終止控制檯?
- 10. 如何阻止C#控制檯應用程序自動關閉?
- 11. 終止子進程
- 12. 如何在SIGINT時僅終止前臺子進程?
- 13. 在VB6中創建子進程,當程序終止時自動終止
- 14. 如何獲得控制檯的進程id在C#控制檯應用程序
- 15. 如何在c中終止程序?
- 16. C#控制檯應用程序:防止Control-C被打印?
- 17. 如何在後臺進程在Perl中終止時通知我?
- 18. 如何禁止在寫入文件時終止應用程序
- 19. 如何防止後臺線程中的異常終止應用程序?
- 20. 如何檢查Linux進程以確定進程何時/何時終止/終止?
- 21. 如何在Android應用程序退出後終止進程?
- 22. 禁止子控制檯輸出(Tkinter的)應用程序
- 23. 在C中終止子進程後,父進程未完成
- 24. 子進程終止清理
- 25. 如何確定應用程序是在後臺還是終止?
- 26. 如何運行計時器認爲應用程序進入後臺或終止
- 27. Java應用程序在控制檯中被阻止
- 28. Threading.Timer在控制檯應用程序中停止
- 29. 無法在控制檯應用程序中停止NSRunLoop
- 30. 在Delphi控制檯應用程序中防止閃爍