杀死儿童过程结束

时间:2011-09-04 20:35:01

标签: c# cpu-usage child-process

我有一个C#-Application,它会启动一些子进程并重定向他们的标准输入和输出。

如果我以正常方式关闭应用程序,所有子进程都将被销毁,但如果应用程序被任务管理器杀死或以其他方式无法关闭子进程。

它们存在并且需要很多CPU功率(接近99%)。我认为他们需要这么多电源,因为他们的“重定向”标准输出没有被引用?

有没有办法完全关闭子进程?或者在杀死父进程后减少他们的CPU时间?

谢谢&最好的问候

Kevin Meier

5 个答案:

答案 0 :(得分:1)

简短的回答是不!

当用户终止您的申请流程时,它就会被终止。您无法对此做任何事情,除非您拥有子进程源代码并将其修改为在父终止后结束,或者在终止应用程序时使用单个观察者进程终止应用程序的子进程。

答案 1 :(得分:0)

重定向流不应该导致高CPU使用率,可能还会发生其他事情。

答案 2 :(得分:0)

如果我有这个问题,如果父进程不存在,我会检查所有子进程中运行的父进程,子进程会退出。

答案 3 :(得分:0)

如果要保证子进程在父进程终止时结束,可以使用job objects。不幸的是,没有简单的方法可以从托管代码中执行此操作;它需要大量的P / Invoke互操作调用Win32 API,如CreateJobObjectAssignProcessToJobObject等。但一般情况下它应该是可能的。

答案 4 :(得分:0)

您可以使用命名管道等在父进程和子进程之间进行通信,并继续检查父进程是否存在。