ガイド

Stopping... のまま止まったサービス

スナップインは Stopping を表示したまま動きません。よくある対処は、タスク マネージャーを開き、どの svchost.exe に入っているかを推測して「タスクの終了」を押すことです。それでは、そのプロセス内のほかのサービスもすべて、どれだったかを知らされないまま終了してしまいます。

なぜ起きるのか

  • サービスが停止要求に応答していません。Windows は丁寧に要求して待ちます。ハングしたサービスや、戻ってこない何かを待っているサービスは、応答しません。
  • それに依存するものがまだ実行されています。マネージャーは、ほかのサービスを壊すよりも停止を拒否し、スナップインはそれを待機として表示します。
  • ほかのサービスとプロセスを共有しています。Windows のサービスの多くは、共有の svchost.exe の中で動作します。そのプロセスを終了すると、全部が終了します。タスク マネージャーがその名前を挙げずに行うのは、まさにこれです。

何かを終了する前に確認する

終了すると何が巻き込まれるかを尋ねます。--dry-run を外すまで、何も起きません。

$ bws kill Spooler --dry-run

プレビューは、プロセスを番号で示し、そこに存在するほかのすべてのサービスの名前を挙げ、1 つではなく 2 つのステップを表示します。サービスに停止を要求し、それがうまくいかない場合にのみプロセスを終了します。自力で停止するサービスが強制終了されることはありません。

  • --force は丁寧なステップを省略し、プロセスをすぐに終了します。実行ではなくプランを変えるので、プレビューには 2 つではなく 1 つのステップが表示され、何かが起きる前にその違いが見えます。
  • --restart は、プロセスが消えたあとにすべてを元に戻します。尋ねたエントリと、同じプロセスを共有していたすべてです。これがないと、マシンにはそれらのサービスが停止したまま残り、レポートはそれらを再び開始する方法を伝えます。
  • 拒否はボタンより前に来ます。ドライバー、システムが保護しているプロセス、マネージャーが停止を受け付けないサービスは、60 秒待ったあとではなく、プランを作る時点で理由とともに拒否されます。
  • 重要なときは警告します。エントリがマシンの動作に不可欠なものであれば、プランがそう伝えます。停止すると、サービスだけでなくマシンが落ちます。

プロセスを終了することは、このツールが行う唯一の、マシンに代わって誰も拒否できないことです。だから独立したコマンドになっていて、プレビューが巻き込むすべてのサービスの名前を挙げ、指定しない限り丁寧なステップが先に実行されます。

より安全な順序

  1. 何であるかを確認する。bws show Spooler で、プロセス、依存されているもの、依存しているもの、そもそも停止要求を受け付けているかどうかがわかります。
  2. 通常の停止を、プランとして試す。bws stop Spooler --dry-run --dependents。答えが拒否であれば、3 つの理由のどれなのかが示されます。
  3. 止まらない場合は、終了のコストを確認する。bws kill Spooler --dry-run を実行し、そのプロセスを共有するサービスの一覧を読みます。
  4. それから実行する。戻る方法を用意して。bws kill Spooler --restart。レポートは、うまくいかなかったことと、元に戻すコマンドで終わります。

4 つとも、ウィンドウでも同じように動作します。行を右クリックして Force stop... を選び、プランを読むと、その下のボタンには実行する内容が名前として付いています。

なぜタスク マネージャーでは足りないのか

答えている質問が違うからです。タスク マネージャーが知っているのはプロセスで、この問題はサービスについてのものであり、両者は 1 対 1 には対応しません。

共有の svchost.exe は、十数個のサービスを抱えていることがあります。タスク マネージャーは、その 12 個がどれかを言わずに終了します。どれも自力では戻ってこず、そのあとに何が止まったかを教えてくれるものはありません。svchost.exe を終了するプロセスを検知する EDR は役目を果たしていますが、あなたのクリックとほかの何かを区別することはできません。