Stopping... のまま止まったサービス
スナップインは Stopping を表示したまま動きません。よくある対処は、タスク マネージャーを開き、どの svchost.exe に入っているかを推測して「タスクの終了」を押すことです。それでは、そのプロセス内のほかのサービスもすべて、どれだったかを知らされないまま終了してしまいます。
なぜ起きるのか
- サービスが停止要求に応答していません。Windows は丁寧に要求して待ちます。ハングしたサービスや、戻ってこない何かを待っているサービスは、応答しません。
- それに依存するものがまだ実行されています。マネージャーは、ほかのサービスを壊すよりも停止を拒否し、スナップインはそれを待機として表示します。
- ほかのサービスとプロセスを共有しています。Windows のサービスの多くは、共有の
svchost.exeの中で動作します。そのプロセスを終了すると、全部が終了します。タスク マネージャーがその名前を挙げずに行うのは、まさにこれです。
何かを終了する前に確認する
終了すると何が巻き込まれるかを尋ねます。--dry-run を外すまで、何も起きません。
$ bws kill Spooler --dry-run
プレビューは、プロセスを番号で示し、そこに存在するほかのすべてのサービスの名前を挙げ、1 つではなく 2 つのステップを表示します。サービスに停止を要求し、それがうまくいかない場合にのみプロセスを終了します。自力で停止するサービスが強制終了されることはありません。
--forceは丁寧なステップを省略し、プロセスをすぐに終了します。実行ではなくプランを変えるので、プレビューには 2 つではなく 1 つのステップが表示され、何かが起きる前にその違いが見えます。--restartは、プロセスが消えたあとにすべてを元に戻します。尋ねたエントリと、同じプロセスを共有していたすべてです。これがないと、マシンにはそれらのサービスが停止したまま残り、レポートはそれらを再び開始する方法を伝えます。
- 拒否はボタンより前に来ます。ドライバー、システムが保護しているプロセス、マネージャーが停止を受け付けないサービスは、60 秒待ったあとではなく、プランを作る時点で理由とともに拒否されます。
- 重要なときは警告します。エントリがマシンの動作に不可欠なものであれば、プランがそう伝えます。停止すると、サービスだけでなくマシンが落ちます。
プロセスを終了することは、このツールが行う唯一の、マシンに代わって誰も拒否できないことです。だから独立したコマンドになっていて、プレビューが巻き込むすべてのサービスの名前を挙げ、指定しない限り丁寧なステップが先に実行されます。
より安全な順序
- 何であるかを確認する。
bws show Spoolerで、プロセス、依存されているもの、依存しているもの、そもそも停止要求を受け付けているかどうかがわかります。 - 通常の停止を、プランとして試す。
bws stop Spooler --dry-run --dependents。答えが拒否であれば、3 つの理由のどれなのかが示されます。 - 止まらない場合は、終了のコストを確認する。
bws kill Spooler --dry-runを実行し、そのプロセスを共有するサービスの一覧を読みます。 - それから実行する。戻る方法を用意して。
bws kill Spooler --restart。レポートは、うまくいかなかったことと、元に戻すコマンドで終わります。
4 つとも、ウィンドウでも同じように動作します。行を右クリックして Force stop... を選び、プランを読むと、その下のボタンには実行する内容が名前として付いています。
なぜタスク マネージャーでは足りないのか
答えている質問が違うからです。タスク マネージャーが知っているのはプロセスで、この問題はサービスについてのものであり、両者は 1 対 1 には対応しません。
共有の svchost.exe は、十数個のサービスを抱えていることがあります。タスク マネージャーは、その 12 個がどれかを言わずに終了します。どれも自力では戻ってこず、そのあとに何が止まったかを教えてくれるものはありません。svchost.exe を終了するプロセスを検知する EDR は役目を果たしていますが、あなたのクリックとほかの何かを区別することはできません。