PowerShell,プロセスIDを指定して終了するまで待機する

スポンサーリンク

鍛錬 679

PowerShell,プロセスIDを指定して終了するまで待機する

プロセスID(PID)を指定して、プロセスが終了するまで待機するには、Wait-Process を使用します。
 
使用方法は、以下に示す通りです。

プロセスID(PID)を指定して待機する

Wait-Process -Id プロセスID

 
プロセスID(PID)と最大待機時間を指定して待機する

Wait-Process -Id プロセスID -Timeout 最大待機秒数

パラメータ

以下は、上記のパラメータについてです。

パラメータ 機能
-Id プロセスID(PID)を指定する
-Timeout 最大待機秒数を指定する
 
スポンサーリンク

スクリプト

以下は、指定したプロセスID(PID)について、指定した最大秒数だけ待機するスクリプト、wait_ps.ps1 です。

今回は、スクリプトの実行時に引数として「PID」と「最大待機秒数」を指定するように記述しています。

第1引数 第2引数
プロセスID(PID) 最大待機秒数
# 引数を取得
Param($num_pid, $wait_sec)

echo "--------------------------------------------"
echo "PID = $num_pid を、最大 $wait_sec 秒間待機中"
echo "--------------------------------------------`r`n"

# プロセスが終了するまで待機
Wait-Process -Id $num_pid -Timeout $wait_sec

# 最大待機秒数内にプロセスが終了した場合
if ($? -eq $true) {
	echo "-------------------------------"
	echo "PID = $num_pid が終了しました。"
	echo "-------------------------------"
}
# 最大待機秒数を超えた場合
else {
	echo "--------------------------------------------------------"
	echo "PID = $num_pid は $wait_sec 秒以内に終了しませんでした。"
	echo "--------------------------------------------------------"
}

実行結果

以下は、次の順序でスクリプト wait_ps.ps1 を実行し、プロセス「mspaint」(ペイント) が終了するまで待機しています。

  1. ps コマンドを使用して、「mspaint」のプロセスIDを取得
  2. プロセスIDと最大待機秒数を指定して、スクリプトを実行

最大待機秒数内にプロセスが終了した場合

以下は、プロセスID(PID)「8008」を、最大「10」秒待機しています。

今回は、スクリプト wait_ps.ps1 を実行後、手動で「mspaint」を終了しています。

PS D:\tmp>
PS D:\tmp> ps mspaint

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    329      58     8540      31012       0.33   8008   2 mspaint


PS D:\tmp>
PS D:\tmp>
PS D:\tmp> .\wait_ps.ps1 8008 10
--------------------------------------------
PID = 8008 を、最大 10 秒間待機中
--------------------------------------------

-------------------------------
PID = 8008 が終了しました。
-------------------------------
PS D:\tmp>
PS D:\tmp>
PS D:\tmp> ps mspaint
ps : 名前 "mspaint" のプロセスが見つかりません。プロセス名を確認し、コマンドレットを再度呼び出してく
ださい。
発生場所 行:1 文字:1
+ ps mspaint
+ ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (mspaint:String) [Get-Process], ProcessCommandExcepti
   on
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCo
   mmand

最大待機秒数を超えた場合

以下は、プロセスID(PID)「1288」を、最大「10」秒待機しています。

今回は、wait_ps.ps1 を実行後、「mspaint」を終了せず起動したままにしています。

PS D:\tmp>
PS D:\tmp> ps mspaint

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    329      57     8308      30824       0.31   1288   2 mspaint


PS D:\tmp>
PS D:\tmp>
PS D:\tmp> .\wait_ps.ps1 1288 10
--------------------------------------------
PID = 1288 を、最大 10 秒間待機中
--------------------------------------------

Wait-Process : このコマンドは、プロセス "mspaint (1288)" が指定されたタイムアウト期間内に停止されな
かったため、操作を停止しました。
発生場所 D:\tmp\wait_ps.ps1:10 文字:1
+ Wait-Process -Id $num_pid -Timeout $wait_sec
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.Diagnostics.Process (mspaint):Process) [Wait-Proc
   ess]、TimeoutException
    + FullyQualifiedErrorId : ProcessNotTerminated,Microsoft.PowerShell.Commands.WaitProcessCommand

--------------------------------------------------------
PID = 1288 は 10 秒以内に終了しませんでした。
--------------------------------------------------------
PS D:\tmp>
PS D:\tmp>
PS D:\tmp> ps mspaint

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    329      57     8308      30824       0.31   1288   2 mspaint
スポンサーリンク

シェアする

フォローする