cheshire-boy

システム・サービス

【Stop-Process】PowerShellでプロセスを強制終了させる方法とは?

投稿日:2016年12月5日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell でプロセスを強制停止する方法】

についてご紹介します。

"応答なし"で固まってしまったウィンドウをプロセスごと強制的に停止させたいときにはStop-Process コマンドレットを使用するとよいでしょう!

また、あなたがスクリプトを書くときに「特定の条件下でプロセスを停止させる」という動作を実装したい場合は、Stop-Process コマンドレットを使用して実現することができます。

プロセスを「強制的に停止する」のではなく「停止するまで待機する」方法についてはこちら↓の記事をご参考ください。

 

スポンサーリンク

Stop-Process でプロセスを停止する

プロセスを停止するコマンドレットに

Stop-Process

というものがあります。

【コマンドレット】

Stop-Process

【オプション】

パターン1(プロセス名から指定)
-Name <プロセス名>
-PassThru
-Force
-WhatIf
-Confirm

パターン2(プロセスIDで指定)
-Id <プロセスID>
-PassThru
-Force
-WhatIf
-Confirm

パターン3(オブジェクトで指定)
-InputObject <プロセスオブジェクト>
-PassThru
-Force
-WhatIf
-Confirm

【入力】

System.Diagnostics.Process

【出力】

System.Diagnostics.Process

【エイリアス】

kill
spps

プロセスとは何か」については「プロセスとは...」をご覧下さい。

プロセス名を指定してプロセスを停止する

特定のプロセス名を指定して実行中のプロセスを停止する方法をご紹介します。

コマンドレット詳細に記載した「パターン1(プロセス名で指定)」のオプションを指定します。

Stop-Process -Name "プロセス名"

プロセス名を確認したい場合は Get-Process コマンドレットを使用します。

今回は例として「メモ帳」を停止してみます。メモ帳のプロセス名は「notepad」ですので "-Name" に notepad を指定します。

まずはメモ帳が起動しているか確認してみましょう。

上の確認結果を見てもらうとわかる通りメモ帳を2重起動している状態です。

実際にプロセスを停止してみます。

この通りプロセスが停止されて存在していないことがわかりますね。

「プロセス名を指定してプロセスを停止する」場合の特徴は同じプロセス名を持ったプロセスが全て停止されるという点です。

特定のプロセスだけ停止したい場合は次のプロセスIDを指定する方法を使用しましょう。

プロセスIDを指定してプロセスを停止する

次に特定のプロセスIDを指定して実行中のプロセスを停止する方法をご紹介します。

コマンドレット詳細に記載した「パターン2(プロセス ID で指定)」のオプションを指定します。

Stop-Process -ID "プロセスID"

プロセス ID を確認したい場合も同様に Get-Process コマンドレットを使用します。

プロセス ID は実行中の全てのプロセスに一意に設定されるため「必ず1つのプロセスを指定できる」という特徴があります。

つまり、同じ「メモ帳」のプロセスでもプロセス ID は異なります。

メモ帳のプロセスを確認してみましょう。

結果を見てみるとプロセスIDは「3728」「4128」で全く違う値になっています。

では、「3728」のプロセスIDを指定してメモ帳のプロセスを停止してみましょう。

このように指定したプロセス ID のプロセスのみ停止することができます。

特定のプロセスのみ停止する場合は "-Id" オプションを使用してプロセス停止を行った方が良いかと思います。

InputObject オプションでプロセスを停止する

3つ目の方法として "-InputObject" オプションを使用するプロセス停止方法があります。

InputObject として指定するオブジェクトは「System.Diagnostics.Process」型である必要があります。

簡単に言うとプロセス専用型のオブジェクトです。

Stop-Process -InputObject "プロセスオブジェクト"

プロセス型のオブジェクトというと難しそうに感じますが、Get-Process コマンドレットの実行結果として得られる情報がプロセスオブジェクトそのものなんです。

メモ帳を起動した状態で実行中のプロセスからメモ帳を指定して取得し変数に格納します。

この変数$Proc はプロセスのデータが入ったプロセス型のオブジェクトであるといえます。

GetType による型の確認でも「System.Diagnostics.Process」であることがわかりますね。

InputObject オプションに変数$Procを指定することでプロセスを停止することができます。

このようにプロセス型のオブジェクトを入力にして停止することができます。

これをちょっと応用すると、Start-Process コマンドレットでプロセス起動時に、"-PassThru" オプションを使用してプロセスオブジェクトを取得し、Stop-Process の "InputObject" オプションで使用して停止するなんてこともできます。

Start-Process についてはこちら↓の記事をご参考ください。

共通のスイッチオプション

Stop-Process コマンドレットには3つのパターンには共通したスイッチオプションが存在します。

「-PassThru」オプション⇒出力を強制

"-PassThru" を使用すると停止したプロセスの情報を「System.Diagnostics.Process」型のオブジェクトとして出力するようになります。

何もつけなかった場合は基本的に出力はありません。

「-Force」オプション⇒強制停止

"-Force" を使用すると強制的にプロセスを停止します。

例えば他ユーザが実行するプロセスを停止しようとした場合は、

このように「コマンドレットを実行して良いかの確認」が行われます。

しかし "-Force" オプションを使用すれば確認なく停止することができます。

強制停止をお勧めできませんが自動化するときなどは必要ですね。

「-WhatIf」オプション⇒お試し実行

"-WhatIf" を使用すると「何を実行しようとしているか」という結果の予想を見ることができます。

プロセス停止の前にチェックを行う場合などは有効ですね。

プロセス停止は慎重に行った方が良いので "-WhatIf" で確認する癖をつけると良いかもしれませんね。

「-Confirm」オプション⇒実行の確認

"-Confirm" を使用すると「実行するかどうか」の確認が表示されます。

私物のパソコンならあまり気にすることはないかもしれませんが、サーバなどを操作している場合は確認する習慣をつけた方がいいかもしれませんね。

まとめ

実行中のプロセスを停止する場合は

Stop-Process <停止対象>

を使用する。

停止するプロセスの対象を指定方法は、

[プロセス名で指定]
Get-Process -Name <プロセス名>

[プロセスIDで指定]
Get-Process -Id <プロセスID>

[オブジェクトで指定]
Get-Process -InputPbject <プロセスオブジェクト>

スポンサーリンク

-システム・サービス
-, , , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2018 AllRights Reserved Powered by micata2.