我有一个C#-Application,它会启动一些子进程并重定向他们的标准输入和输出。
如果我以正常方式关闭应用程序,所有子进程都将被销毁,但如果应用程序被任务管理器杀死或以其他方式无法关闭子进程。
它们存在并且需要很多CPU功率(接近99%)。我认为他们需要这么多电源,因为他们的“重定向”标准输出没有被引用?
有没有办法完全关闭子进程?或者在杀死父进程后减少他们的CPU时间?
谢谢&最好的问候
Kevin Meier
答案 0 :(得分:1)
简短的回答是不!
当用户终止您的申请流程时,它就会被终止。您无法对此做任何事情,除非您拥有子进程源代码并将其修改为在父终止后结束,或者在终止应用程序时使用单个观察者进程终止应用程序的子进程。
答案 1 :(得分:0)
重定向流不应该导致高CPU使用率,可能还会发生其他事情。
答案 2 :(得分:0)
如果我有这个问题,如果父进程不存在,我会检查所有子进程中运行的父进程,子进程会退出。
答案 3 :(得分:0)
如果要保证子进程在父进程终止时结束,可以使用job objects。不幸的是,没有简单的方法可以从托管代码中执行此操作;它需要大量的P / Invoke互操作调用Win32 API,如CreateJobObject,AssignProcessToJobObject等。但一般情况下它应该是可能的。
答案 4 :(得分:0)
您可以使用命名管道等在父进程和子进程之间进行通信,并继续检查父进程是否存在。