終了したプロセスを知る

「get-process」はCmdlet実行時のスナップショット

「get-process」で取得できるプロセス情報は、Cmdlet実行時のスナップショットです。
あるプロセスが生きているかをチェックする際、
もちろん、毎回「get-process」を発行すれば確認は可能ですが、それではコストがかかりすぎます。


今回紹介する方法を使うと、毎回「get-process」を発行することなく、
「指定プロセスが終了したかどうか」をチェックすることが可能になります。

「HasExited」プロパティ

「プロセスが終了したかどうか」を判定するには、
「get-process」で取得できる「System.Diagnostics.Process」オブジェクトの「HasExited」プロパティを利用します。
参考:HasExited Property


「HasExited」プロパティは、

  • プロセスが終了していれば「True」
  • プロセスが生きていれば「False」

を返します。

終了したプロセスを取得する

最初に「メモ帳」と「電卓」を起動し、プロセス一覧を取得します。

MSH C:\> notepad
MSH C:\> calc
MSH C:\> $process = get-process

次に「メモ帳」と「電卓」の「×」ボタンを押してプロセスを終了してから、
以下のスクリプトを実行してみましょう。

MSH C:\> $process | where {$_.hasexited}

Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     62       4     1180       3856    25            2828 calc
     66       4     1212       3812    25            1940 notepad

「メモ帳」と「電卓」のプロセスが終了した事が分かります。