cheshire-boy

システム・サービス

【Get-Process】PowerShellでプロセス取得する方法は?その見方は?

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

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

今回は、

【PowerShell で実行中のプロセスを確認する方法】

についてご紹介します。

今回紹介する ”Get-Process” コマンドレットではマシン上で実行されているプロセスに関する情報を簡単に取得できます。

実行中のプログラムを確認する場合やプログラムがどれくらいリソースを消費しているかなどを確認することができます。

別プロセスを新たに起動する方法についてはこちら↓をご参考ください。

スポンサーリンク

Get-Process で実行中のプロセスを確認する

実行中のプロセスを取得するコマンドレットに

Get-Process(→ コマンドレットの詳細はこちら

というものがあります。

【コマンドレット】

Get-Process

【オプション】

パターン1(プロセス名から取得)
-Name               <プロセス名(複数可)>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

パターン2(プロセスIDから取得)
-Id                     <プロセスのID(複数可)>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

パターン3(プロセスオブジェクトから取得)
-InputObject       <プロセスのオブジェクト>
-ComputerName <マシン名やIPアドレス>
-Module
-FileVersionInfo

[v4,v5以降]
-IncludeUserName

【入力】

System.String[]
System.Int32[]
System.Diagnostics.Process[]

【出力】

System.Diagnostics.ProcessModule
System.Diagnostics.FileVersionInfo
System.Diagnostics.Process

【エイリアス】

ps
gps

プロセスとは...

プロセスとは簡単に言うと「実行中のプログラム」の事を指します。

コンピュータの中には様々なソフトウェアプログラムの実行ファイル(.exeファイルなど)が存在します。これらが起動されると「メモリ」の中に読み込まれます。

このメモリに読み込まれ実行中となったプログラムの事を「プロセス」と言います。

プログラムには「データがどのように動作するか」などの定義が記載してあり、このプログラムがメモリの上に展開(読み込まれること)されると定義どおりにデータが動作します。

プログラムが実際に動作する1つ1つの実行状態がプロセスの単位です。

「メモ帳 (notepad.exe) 」を例に説明しましょう。

メモ帳アイコン-チェシャわら
メモ帳アイコン-チェシャわら

「メモ帳」は、あなたも良く使っていると思いますが、その実態は

C:\Windows\System32\notepad.exe

という実行ファイル(プログラム)なんです。

メモ帳は1度にいくつも起動することができますね。

メモ帳の多重起動-チェシャわら
メモ帳の多重起動-チェシャわら

図のように3つのメモ帳を起動した場合、「notepad」というプロセスが3つ実行中であるという風に考えます。

プロセスを取得する

では実際に実行中のプロセスを取得してみます。

このようにオプションを指定しない場合はマシン上で実行中のプロセス全て表示されます。

実行結果を見てみると9つのプロパティについて情報が表示されています。

それぞれのプロパティがどういった情報なのか簡単に説明します。

Handles  ⇒ プロセスがオープンしたハンドルの数

…利用しているリソースのハンドルの数を表す。

NPM(K) ⇒ プロセスが使用している非ページメモリのサイズ(KB)

…プロセスのページング(スワップアウト)不可能なメモリサイズを表す。

PM(K) ⇒ プロセスが使用しているページメモリのサイズ(KB)

…プロセスのページング可能なメモリサイズを表す。

WS(K) ⇒ プロセスのワーキングセットのサイズ(KB)

…プロセスに割り当てられたワーキングセットのメモリサイズを表す。

VM(M) ⇒ プロセスが使用している仮想メモリのサイズ(MB)

…プロセスに割り当てられた仮想メモリのサイズを表す。プロセスがメモリを使うために用意された領域の大きさを表す。

CPU(s) ⇒ プロセスが全てのプロセッサで使用したプロセッサ時間(秒)

…プロセスが開始されてから(プログラムが実行されたから)CPU上で「実行」状態になった時間の合計を表す。

Id ⇒ プロセスのプロセスID

…プロセスを識別するための番号である。0(System Idlw Process)と4(System)以外のPIDはそれぞれ異なる。

SI ⇒ プロセスのセッションID

…セッションを識別するための番号である。ユーザのログオン毎にセッションが作成されるため、どのユーザセッションで実行されているのかが判別できる。

ProcessName ⇒ プロセスのプロセス名

…プロセスを識別するためのプロセス名である。2重起動可能なプログラムもあるためプロセス名は重複する場合がある。

このようにGet-Process コマンドレットの実行結果からは

・どのプロセスが       … ProcessName,PID
・どれぐらいのメモリを使って … NPM,PM,WS,VM
・どれだけの時間動いているか … CPU

といった情報を確認することができます。

プロセス名を指定してプロセスを取得する

実行中の全てのプロセスを取得する方法は先ほど紹介しました。

次に、特定のプロセス名 (ProcessName) を指定(フィルタリング)して取得する方法についてご紹介します。

コマンドレットの詳細に記載した「パターン1(プロセス名から取得)」のオプションを使用します。

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

では実際にプロセス名を指定してみます。

今回はわかりやすいように「メモ帳 (notepad) 」を指定します。

このようにプロセス名が "notepad" だけ抽出されて表示されました。

また、プロセス名の指定にはワイルドカードが使用できます。

プロセス名でフィルタリングする場合の利点は「アプリケーションやソフトウェア名から何となくでも絞り込めること」だと思います。

逆に今回実践したように同じプログラムを2重起動している場合は、どっちがどっちかわからないという状態になってしまうこともあります。

プロセス ID を指定してプロセスを取得する

次に、特定のプロセス ID (Id) を指定してフィルタリングする方法についてご紹介します。

コマンドレットの詳細に記載した「パターン2(プロセス ID から取得)」のオプションを使用します。

Get-Process -Id  "プロセスID"

では実際にプロセスIDを指定してみます。

先ほど2重起動したメモ帳のうちプロセス ID が「4184」の方を指定してみましょう。

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

そのためプロセスを管理する(優先順位の変更・実行終了など)場合に多く用いられます。

また、先ほどとは違いワイルドカードでプロセスIDを指定することはできません。

プロセスオブジェクトからプロセスを取得する

プロセスオブジェクトとは「System.Diagnostics.Process」型のデータの事です。プロセス名やプロセス ID などのデータを持っています。

Get-Process コマンドレットで得られるデータそのものがプロセスオブジェクトです。

では、どんな場面でこのパターンを使えばいいのかというと、「Start-Process」コマンドレットによって起動したプロセスを監視する場合などに用いることができます。

コマンドレットの詳細に記載した「パターン3(プロセスオブジェクトから取得)」のオプションを使用します。

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

では、実際に「Start-Process」でプロセスを起動しそのプロセスを確認してみましょう。

このように変数に格納したプロセスオブジェクトを追うことができます。

ちなみに "-PassThru" オプションとは通常戻り値が発生しないコマンドレットに対して戻り値を返させるというものです。

まとめ

実行中のプロセスを確認する場合は

Get-Process

を使用する。

実行中のプロセスに対してフィルタリングする場合は

[プロセス名でフィルタ]
Get-Process -Name <プロセス名>

[プロセスIDでフィルタ]
Get-Process -Id <プロセスID>

を使用する。

スポンサーリンク

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

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