问题:如何确定子进程树中的所有进程以杀死它们?我有一个用C#编写的应用程序,它将:从服务器获取一组数据,然后,生成第三方实用程序来处理数据将结果返回给服务器.这工作正常.但是由于运行会占用大量CPU并且可...

问题:如何确定子进程树中的所有进程以杀死它们?
我有一个用C#编写的应用程序,它将:
>从服务器获取一组数据,
>然后,生成第三方实用程序来处理数据
>将结果返回给服务器.
这工作正常.但是由于运行会占用大量CPU并且可能需要长达一个小时,因此我想添加让我的应用终止其子进程的能力.
我在其他地方找到的简单解决方案的一些问题是:
>我的应用程序的子进程“A”(我认为是InstallAnywhere EXE)产生真正的处理应用程序“B”(一个java.exe),它反过来产生更多的孩子“C1”……“Cn”(其中大部分都是写的)在Java).
>我的应用程序可能有多个副本(因此,它的多个子集)在同一台机器上运行.
>子进程不在我的控制范围内,因此将来可能会有一些“D”进程.
>我的应用程序必须在32位和64位版本的MSWindows上运行.
从好的方面来说,没有数据丢失的问题,只要流程以相当快的速度结束,“干净”关闭就无关紧要了.
解决方法:
我想你可以用the MSDN forums的代码杀死你的孙子孙女.
public bool killProcess(int pid)
{
bool didIkillAnybody = false;
try
{
Process[] procs = Process.GetProcesses();
for (int i = 0; i < procs.Length; i++)
{
didIkillAnybody = GetParentProcess(procsIdea.Id) == pid) &&
killProcess(procsIdea.Id);
}
try
{
Process myProc = Process.GetProcessById(pid);
myProc.Kill();
return true;
}
catch { }
}
catch (Exception ex)
{
try
{
new Logger().Write("Exception caught at JobExecution.killProcess()", ex.Message, System.Diagnostics.EventLogEntryType.Warning, false);
}
catch { }
}
return didIkillAnybody;
}
private int GetParentProcess(int Id)
{
int parentPid = 0;
using (ManagementObject mo = new ManagementObject("win32_process.handle='" + Id.ToString() + "'"))
{
mo.Get();
parentPid = Convert.ToInt32(mo["ParentProcessId"]);
}
return parentPid;
}
本文标题为:如何在WXP(和更新的MSWindows)上使用C#终止所有[grand]子进程


基础教程推荐
- c#中利用Tu Share获取股票交易信息 2023-03-03
- C#通过GET/POST方式发送Http请求 2023-04-28
- 京东联盟C#接口测试示例分享 2022-12-02
- Unity shader实现多光源漫反射以及阴影 2023-03-04
- 使用c#从分隔文本文件中插入SQL Server表中的批量数据 2023-11-24
- C#中类与接口的区别讲解 2023-06-04
- C# – NetUseAdd来自Windows Server 2008和IIS7上的NetApi32.dll 2023-09-20
- C# Winform实现石头剪刀布游戏 2023-01-11
- c#读取XML多级子节点 2022-11-05
- C#集合查询Linq在项目中使用详解 2023-06-09