私は自分の仕事用PCを起動するたびに私が使用するバッチファイルを持っています。基本的には、IT部門が私のユーザーアカウントとして実行するPCに置くすべてのbloatwareを使用しないでください。使用しない場合は、小さなプログラムをインストールして、実際に必要なすべてのプログラムを一度に読み込みます。問題は、私が走っているプログラムの1つですが、IT部門は最近、私がすでにやっていることを知っているプログラムの中のいくつかを自動化するための "ヘルパー"プログラムをインストールすると役に立ちます。問題は、ヘルパープログラムが実際に逆効果を持ち、実際のプログラムが遅くなることです。私たちはもちろん、それについてITに苦情を言い渡していますが、それを修正するには数ヶ月かかるでしょう。その間、ヘルパープログラムは自分のユーザーアカウントの下で自分のプロセスとして実行されることが分かりました。つまり、私はそれを強制終了でき、すべてがスムーズに実行されます。問題は、プログラムの実行方法です。プログラムを正常に起動すると、次のようになります。続行する前に別のプロセスが終了するまでバッチファイルを待機します
プロセスAが読み込まれます。プロセスAはプロセスBをロードする。プロセスAはそれ自身を殺す。プロセスBはプロセスCをロードする。プロセスCはプロセスD、E、F(ヘルパープログラム)をロードする。プロセスBは、C、D、E、Fをメモリに残したままで、自分自身を殺します(プログラムはこの時点で完全にロードされています)。
バッチファイルはプロセスBが自分自身を殺すのを待つことができます。 taskkill
プロセスD、E、Fを終了するコマンド?コマンドラインはEXEを直接呼び出すときにプロセスAしか見ることができないため、Aはすぐにそれを殺すので、1秒以内にバッチファイルを再開します。私はちょうどtimeout
または何か他の一般的な時間の浪費を使用することはできません。プログラムの読み込み時間があまりにも揮発性で、ネットワーク上の問題、プログラムの更新などの理由で。
あなたはSysInternalsの 'PsKill'ユーティリティを見てみたいことがあります。' \tキルプロセスとそのdescendants.'リンクを-t:https://technet.microsoft.com/en-us/sysinternals/pskill –
'taskkill'はすでにプロセスを終了させることができ、/ tスイッチを使って終了します。プロセスCは実際のプログラムであり、開かれたままにする必要があります。さらに、すべてがロードされた後、タスク階層は残っていません。 – modemman11
'プロセスCは実際のプログラムであり、開いたままにする必要があります。 「タスク階層は残っていません」D、E、Fは階層構造ではないのですか?それとも、私はその質問を誤解しましたか? –