Windowsのプロセスがフリーズしたり、アプリが反応しなくなったとき、タスクマネージャーを使う方が多いと思います。
でも、もっとスマートに処理を終了させたいならPowerShellのStop-Process
コマンドが便利です。
本記事では、
「Stop-Process
ってなに?」
「どうやって使うの?」
「使うときの注意点は?」
といった疑問に答えながら、初心者でもすぐに活用できるようわかりやすく解説します。
Stop-Processとは?

PowerShellのStop-Process
は、指定したプロセスを終了させるコマンドレットです。
タスクマネージャーの「タスクの終了」と似ていますが、スクリプトや自動化に活用できるのが強みです。
このコマンドレットの主な特徴:
- 名前やIDでプロセスを指定して終了できる
- 複数プロセスを一度に終了できる
- スクリプト内で条件付き終了など柔軟な制御が可能
- リモートコンピューターのプロセスも終了可能
エイリアス(省略形)として、kill
やspps
も使えます。
基本的な使い方
まずはプロセスID(PID)を指定して停止する基本の書き方です。
Stop-Process -Id 1234
1234
は対象プロセスのID。
IDは以下のようにして取得できます:
Get-Process
実行すると、実行中のすべてのプロセスとそのIDが表示されます。
特定のプロセスのIDだけを確認したい場合:
Get-Process -Name "notepad" | Select-Object Id
名前でプロセスを停止する方法

プロセス名がわかっている場合、IDではなく名前で終了させることもできます。
Stop-Process -Name "notepad"
これは「メモ帳(notepad.exe)」を終了する例です。
プロセス名は拡張子(.exe)なしで指定します。
ワイルドカードを使って一部の名前だけで指定することも可能です:
Stop-Process -Name "note*"
ただし、ワイルドカードの使用は注意が必要です。意図しないプロセスも終了してしまう可能性があります。
複数のプロセスを一括で停止する方法
複数のIDまたは名前を同時に指定できます。
Stop-Process -Name "chrome", "notepad"
または、
Stop-Process -Id 1234, 5678
また、パイプラインを使用して、特定の条件に一致するプロセスをすべて終了することもできます:
# メモリ使用量が100MB以上のChromeプロセスをすべて終了
Get-Process -Name chrome | Where-Object { $_.WorkingSet -gt 100MB } | Stop-Process
# 30分以上実行されているすべてのnotepadプロセスを終了
Get-Process -Name notepad | Where-Object { $_.StartTime -lt (Get-Date).AddMinutes(-30) } | Stop-Process
強制終了と通常終了の違い

Stop-Process
は、強制終了に相当します。
つまり、保存していないデータがある場合も問答無用で終了させます。
タスクマネージャーで「応答なし」のアプリを強制終了するのと同じです。
そのため、業務用アプリや重要なソフトには慎重に使用しましょう。
確認メッセージを表示して、ユーザーに判断を委ねることもできます:
Stop-Process -Name "notepad" -Confirm
実行すると、以下のようなメッセージが表示されます:
Confirm
Are you sure you want to perform this action?
Performing the operation "Stop-Process" on target "notepad (1234)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
複数のプロセスを指定した場合、プロセスごとに確認がきます。
WhatIfパラメータを使用すると、実際に終了させずに何が行われるかをシミュレーションできます:
Stop-Process -Name "notepad" -WhatIf
よくあるエラーと対処法

エラー例:アクセスが拒否されました
Stop-Process : このプロセスにアクセスできません。
解決策:
- PowerShellを「管理者として実行」して再試行
- 対象プロセスがシステム関連でないか確認
- プロセスの所有者が現在のユーザーであるか確認
エラー例:プロセスが見つかりません
Stop-Process : Cannot find a process with the name "program". Verify the process name and call the cmdlet again.
解決策:
- 正確なプロセス名を
Get-Process
で確認 - 大文字小文字は区別されないが、スペルミスがないか確認
- プロセスが既に終了していないか確認
エラー例:プロセスIDが無効
Stop-Process : Cannot find a process with the identifier 9999.
解決策:
- 最新のプロセスIDを
Get-Process
で確認 - プロセスが既に終了していないか確認
セキュリティや注意点
- 間違ったプロセスを終了するとシステム不安定になる場合があります
- システム関連のプロセス(例:
svchost
など)は終了させない方が安全です - スクリプトで使うときは、対象を明確に確認するロジックを追加しましょう
- 自動実行タスクに組み込む場合、ログ記録を忘れずに!
- リモートコンピューターのプロセス終了には適切な権限が必要です
ベストプラクティス:
- 終了させる前に、プロセスの情報を確認する
- 可能な限りプロセスIDで指定する(名前だと複数一致する場合がある)
- 自動化スクリプトでは、エラーハンドリングを実装する
- 重要なデータを扱うアプリケーションは慎重に扱う
高度な使い方と応用例
リモートコンピューターのプロセスを終了する
Invoke-Command -ComputerName "RemotePC" -ScriptBlock {
Stop-Process -Name "notepad"
}
スケジュールタスクで定期的にプロセスをチェックして終了する例
# 1時間以上実行されているChromeプロセスを定期的に終了するスクリプト例
$oldProcesses = Get-Process chrome | Where-Object { $_.StartTime -lt (Get-Date).AddHours(-1) }
if ($oldProcesses) {
$oldProcesses | ForEach-Object {
Write-Output "Stopping process $($_.Name) (ID: $($_.Id)) running since $($_.StartTime)"
$_ | Stop-Process -Force
}
}
メモリ使用量が多いプロセスを監視して終了する例
# 1GB以上のメモリを使用しているプロセスを特定して終了
$highMemProcesses = Get-Process | Where-Object { $_.WorkingSet -gt 1GB -and $_.Name -ne "System" }
foreach ($proc in $highMemProcesses) {
Write-Warning "High memory usage detected: $($proc.Name) using $([math]::Round($proc.WorkingSet / 1MB)) MB"
$confirmation = Read-Host "Do you want to stop this process? (y/n)"
if ($confirmation -eq 'y') {
Stop-Process -Id $proc.Id -Force
Write-Output "Process terminated."
}
}
まとめ
PowerShellのStop-Process
は、Windows上のプロセス管理をスクリプトで行いたいときにとても便利です。
特にタスクの自動化やリモート管理を行う環境では重宝します。
今日のポイント
Stop-Process -Id
でID指定、-Name
で名前指定- 複数指定や強制終了も可能
-Confirm
や-WhatIf
で安全に使用- 誤って重要なプロセスを終了しないよう注意
- スクリプトで自動化すれば、定期的なシステムメンテナンスも効率化
PowerShellを使いこなして、よりスマートなWindows操作を実現しましょう!
このコマンドレットを理解することは、PowerShellによるシステム管理の基本スキルの一つです。
特に複数のコンピューターを管理する環境では、タスクマネージャーを開くよりも効率的にプロセス管理ができるようになります。
コメント