0

いくつかの子プロセスを開始し、それらの標準入力と出力をリダイレクトする C# アプリケーションがあります。

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

それらは存在し、多くの CPU パワー (ほぼ 99%) を必要とします。「リダイレクトされた」標準出力が読み取られないため、非常に多くの電力が必要だと思いますか?

子プロセスを常に閉じる方法はありますか? または、親プロセスを強制終了した後に CPU 時間を減らすには?

感謝をこめて

ケビン・マイヤー

4

5 に答える 5

1

短い答えはノーです!

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

于 2011-09-04T20:50:24.797 に答える
0

ストリームをリダイレクトしても、それだけで CPU 使用率が高くなることはありません。別のことが起こっている可能性があります。

于 2011-09-04T20:49:22.203 に答える
0

この問題が発生した場合、親プロセスが存在しない場合、すべての子プロセスで実行中の親プロセスを時々チェックし、子プロセスは終了します。

于 2011-09-04T20:51:49.113 に答える
0

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

于 2011-09-05T03:04:24.383 に答える
0

親が終了したときに子プロセスが終了することを保証したい場合は、ジョブ オブジェクトを使用できます。残念ながら、マネージ コードからこれを行う簡単な方法はありません。CreateJobObjectAssignProcessToJobObjectなどの Win32 API への多くの P/Invoke 相互運用呼び出しが必要になりますが、一般的には可能です。

于 2011-09-05T02:34:10.793 に答える