问题:如何确定子进程树中的所有进程以杀死它们?我有一个用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]子进程
基础教程推荐
- unity实现动态排行榜 2023-04-27
- 一个读写csv文件的C#类 2022-11-06
- winform把Office转成PDF文件 2023-06-14
- C# List实现行转列的通用方案 2022-11-02
- C#控制台实现飞行棋小游戏 2023-04-22
- C#类和结构详解 2023-05-30
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# 调用WebService的方法 2023-03-09
- C# windows语音识别与朗读实例 2023-04-27
- ZooKeeper的安装及部署教程 2023-01-22