Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

Windowsサービスが「停止中(Stopping)」や「開始中(Starting)」の状態のまま固まってしまったとき、手動でプロセスを強制終了するにはどうすればよいのでしょうか。多くのWindows管理者は、サービスの開始・停止・再起動を試みたものの、ステータスが「停止中」や「開始中」のまま固まってしまう問題に遭遇したことがあるはずです。

この状態になると、サービス管理コンソール(services.msc)からはサービスを停止できません。すべての操作ボタンが無効化(グレーアウト)されてしまうためです。最も簡単な対処法はWindowsの再起動ですが、本番環境などでは常に許容できるとは限りません。そこで本記事では、システムを再起動することなく、固まったWindowsサービスやプロセスを強制終了する代替手段を詳しく解説します。

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

サービス停止時のタイムアウトエラーとServicesPipeTimeoutレジストリ

サービスの停止を試みてから30秒以内に停止しない場合、Windowsは次のようなメッセージを表示します。

Windows Could not stop the xxxxxx service on Local Computer
Error 1053: The service did not respond in a timely fashion.

サービスコントロールマネージャー(SCM)がサービスの開始・停止を待機するタイムアウト時間は、レジストリパラメータServicesPipeTimeoutで変更できます。指定したタイムアウト時間内にサービスが起動しない場合、Windowsはイベントビューアーにエラーを記録します(イベントID:7000、7009、7011、「タイムアウトに達しました 30000ミリ秒」など)。

たとえば、このタイムアウトを60秒に延長したい場合は、次のコマンドを実行します。

reg add HKLM\SYSTEM\CurrentControlSet\Control /v ServicesPipeTimeout /t REG_SZ /d 600000 /f

これは、すべてのプロセスを適切に終了してファイルを閉じるのに十分な時間がない重量級のサービス(MS SQL Serverなど)を開始・停止する際に特に有効です。

コマンドプロンプトから net stop wuauserv のように固まったサービスを停止しようとすると、次のようなメッセージが表示されます。

The service is starting or stopping. Please try again later.

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

または、次のようなエラーが表示されることもあります。

Windows could not stop the Service on Local Computer.
[SC] ControlService Error 1061: The service cannot accept control messages at this time.

目次

  • taskkillコマンドで固まったWindowsサービスを強制終了する方法
  • PowerShellで固まったWindowsサービスを強制停止する方法
  • リソースモニターでハングしたサービスの待機チェーンを分析する
  • Process Explorerでハングしたサービスを強制終了する

taskkillコマンドで固まったWindowsサービスを強制終了する方法

固まったサービスを停止する最も簡単な方法は、標準搭載のコマンドラインツールtaskkillを使うことです。まず、サービスのPID(プロセス識別子)を調べる必要があります。ここでは例としてWindows Updateサービスを挙げます。そのシステム名は wuauserv です(services.mscコンソールのサービスプロパティで名前を確認できます)。

なお、サーバーの再起動時にWindows Modules Installerサービスがハングするのはよくある現象です。特にWindows Server 2012 R2や2016で更新プログラムをインストールした直後に発生しやすいことで知られています。

注意: 重要なWindowsサービスを強制終了すると、BSOD(ブルースクリーン)や予期しないシステム再起動が発生する可能性があります。操作の際は十分に注意してください。

管理者権限のコマンドプロンプトで次のコマンドを実行します(管理者権限で実行しないと「アクセス拒否」エラーが表示されます)。

sc queryex wuauserv

この例では、wuauservサービスのPIDは9186です。PID 9168の固まったプロセスを強制終了するには、次のコマンドを実行します。

taskkill /PID 9168 /F

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

SUCCESS: The process with PID 9168 has been terminated.

このコマンドにより、サービスのプロセスが強制的に終了されます。その後、sc start servicename コマンドまたはサービス管理コンソールからサービスを再度開始できます。

PIDを手動で確認せずに、よりスマートにハングしたサービスを停止することも可能です。taskkillツールには/FIオプションがあり、フィルターを使って対象のサービスやプロセスを選択できます。特定のサービスを強制終了するには、次のコマンドを使用します。

taskkill /F /FI "SERVICES eq wuauserv"

また、サービス名を指定せずに、応答なし状態のすべてのサービスをまとめて強制終了することもできます。

taskkill /F /FI "status eq not responding"

これらのコマンドを実行後、「停止中」ステータスで固まっていたサービスは停止するはずです。

さらに、taskkillユーティリティを使えば、リモートコンピューター上のハングしたサービスを強制停止することもできます。

taskkill /S mun-fs01 /F /FI "SERVICES eq wuauserv"

PowerShellで固まったWindowsサービスを強制停止する方法

PowerShellを使ってサービスを強制停止することもできます。次のコマンドを実行すると、「停止中(stop pending)」状態のサービス一覧を取得できます。

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

「開始中(start pending)」状態のサービスを取得する場合はこちらです。

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'start pending'}

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

Stop-Process コマンドレットを使うと、検出されたすべてのサービスのプロセスを終了できます。次のPowerShellスクリプトは、Windows上で固まっているすべてのサービスプロセスを強制終了します。

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message "Error. Error details: $_.Exception.Message"
}
}
}
else {
Write-Output "No services with 'Stopping'.status"
}

「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】

なお、新しいPowerShell Core 6.x/7.xでは、Get-WmiObject の代わりに Get-CimInstance コマンドレットを使用する必要があります。スクリプトの最初のコマンドを次のように置き換えてください。

$Services = Get-CimInstance -Class win32_service | where-Object state -eq 'stop pending'

リソースモニターでハングしたサービスの待機チェーンを分析する

resmon.exe(リソースモニター)を使うと、サービスをハングさせている原因のプロセスを特定できます。手順は以下の通りです。

  1. リソースモニターのウィンドウで「CPU」タブを開き、ハングしているサービスのプロセスを探します。
  2. 該当プロセスを右クリックし、コンテキストメニューから「待機チェーンの分析」を選択します。「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】
  3. 新しいウィンドウが開き、おそらく自分のプロセスが別のプロセスを待機していることがわかります。原因となっているプロセスを終了してください。ただし、svchost.exeなどのシステムプロセスを待機している場合は、それ自体を終了してはいけません。代わりにそのプロセスに対しても待機チェーンの分析を行い、svchost.exeが待機しているプロセスのPIDを特定して、そのプロセスを終了します。

Process Explorerでハングしたサービスを強制終了する

SYSTEMアカウントで動作している一部のプロセスは、ローカル管理者であっても終了できない場合があります。これは、管理者アカウントに一部のプロセスやサービスへのアクセス権限がないためです。このようなプロセス(サービス)を停止するには、まずローカルのAdministratorsグループにサービス(プロセス)への権限を付与してから、強制終了する必要があります。この作業には、psexec.exeProcess Explorer(いずれもMicrosoftのサイトから入手可能)という2つの小さなツールが必要です。

  1. SYSTEM権限でProcess Explorerを起動するには、次のコマンドを使用します:PSExec -s -i ProcExp.exe
  2. Process Explorerのプロセス一覧から、固まったサービスのプロセスを見つけて、プロパティを開きます。
  3. Services」タブに移動し、対象のサービスを見つけて「Permissions(アクセス許可)」ボタンをクリックします。「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】
  4. サービスのアクセス許可で、Administratorsグループに「フルコントロール」権限を付与し、変更を保存します。「停止中」「開始中」で固まったWindowsサービスを強制終了する方法【再起動不要】
  5. その後、サービスプロセスの停止を試みてください。なお、ここで付与したサービスへの権限は一時的なものであり、サービスが再起動されると失われます。永続的にサービスへの権限を設定したい場合は、「Windowsサービスへのアクセス許可を設定する」関連記事を参照してください。
  1. Windows 11でサービスを有効・無効にする方法をわかりやすく解説

    多くのアプリケーションや機能は、ユーザーの操作を必要とせずバックグラウンドで動作することで、OS全体の円滑な稼働を支えています。Windows OSの中核を担う「サービス」もその代表例です。これらのコンポーネントは、エクスプローラー、Windows Update、システム全体の検索といったWindowsの基本機能が常に正常に動作できるよう準備を整え、支障なく利用できる状態を維持しています。本記事では、Windows 11で任意のサービスを有効または無効にする方法を詳しく解説します。 Windows 11でサービスを有効/無効にするには すべてのサービスが常時バックグラウンドで動作している

  2. Windows 10でサービス エラー1053を解決する方法|原因と8つの対処法を徹底解説

    PC上でサービスを起動しようとした際、サービスが一定時間内に応答しないと、「エラー1053: サービスは開始または制御要求に時間内に応答しませんでした(Error 1053: The service did not respond to the start or control request in a timely fashion)」が表示されます。このエラーはさまざまな形で現れ、カスタムサービスを起動できなくなることもあります。特に開発者の方からは、独自のソフトウェアを開発する際にこのサービス エラー1053が頻繁に発生するという報告も寄せられています。 本記事では、このエラーメッセージ