質問

C#-Applicationがあり、一部の子どもプロセスを開始し、スタンドアート入力と出力をリダイレクトします。

通常の方法でアプリケーションを閉じると、すべての子プロセスが破壊されますが、アプリケーションがタスクマネージャーまたは別の方法で殺された場合、子供プロセスを閉じることができません。

それらは存在し、多くのCPU-Power(ほぼ99%)が必要です。彼らの「リダイレクトされた」StandART出力が読み取られていないので、彼らはそんなに多くの力を必要としていると思いますか?

子どもプロセスを常に閉じる方法はありますか?または、親プロセスを殺した後、CPU時間を減らすために?

感謝をこめて

ケビン・マイヤー

役に立ちましたか?

解決

短い答えはノーです!

ユーザーが申請プロセスを終了すると、終了するだけです。子のプロセスソースコードがあり、親の終了後に終了するように変更するか、個々のオブザーバープロセスを使用して終了時にアプリケーションの子プロセスを終了しない限り、それについて何もできません。

他のヒント

ストリームをリダイレクトすることは、自己によって高いCPU使用を引き起こすことはありません。おそらく何か他のことが起こっています。

この問題が発生した場合、親プロセスが存在しない場合、すべての子プロセスで親のプロセスを実行することがあることがあります。

親が終了したときに子供のプロセスが終了することを保証したい場合は、使用できます ジョブオブジェクト. 。残念ながら、マネージドコードからこれを行う簡単な方法はありません。 win32 APIのように多くのp/interopコールが必要です createjobobject, AssignProcessToJoBoBject, 、など。しかし、一般的に可能です。

名前付きパイプなどを使用して、親と子のプロセス間で通信し、親がそこにいるかどうかを確認し続けることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top