Programming Field

Waitfor - DOS/コマンドプロンプト コマンド一覧

[Windows 7 以降](Windows Server 2003 以降) ネットワーク越しにシグナルの送受信を行います。バッチ処理の待機に使用することができます。

※ このページにおける「シグナル」とは、Waitfor プログラムで使用されるメッセージのようなものを指します。シグナルの形式は基本的には Waitfor でのみ使用されるものとなります。

構文

-- シグナル送信構文
waitfor[.exe] [/S <computer> [/U <user> [/P <password>]]] /SI <signal-name> 
-- シグナル受信構文
waitfor[.exe] [/T <seconds>] <signal-name>

オプション一覧

/S <computer>
シグナルの送信先となるコンピューターをコンピューター名またはIPアドレス(UNCパスで使用可能な名前)で指定します。
このパラメーターを省略した場合は、シグナルは同じプライマリドメインのコンピューターにブロードキャストされます
※ 「.」は指定できません。(<computer>\\<computer>\IPC$ にアクセスできる名前である必要があります)
/U <user>
コンピューターに接続する際のユーザー名を指定します。<user> には同じドメインのユーザー名を指定するか、ドメイン付きのユーザー名を「<domain>\<user>」の形式で指定します。
/P <password>
/U で指定したユーザーに対応するパスワードを指定します。
/SI <signal-name>
送信するシグナルの名前を指定します。シグナル名の文字は半角アルファベット・半角数字と、ASCII文字のコード128から255に当たる文字のみが使用できます。(例としてハイフンやスラッシュは使用できません。)
なお、シグナルは受信する相手がいるかどうかにかかわらず、(コンピューターに接続できれば)送信に成功します。
/T <seconds>
シグナルの受信を待機する待ち時間を指定します。<seconds> には待ち時間を秒数で指定します。
このパラメーターを省略した場合は、シグナルが受信される(か Ctrl+C などが行われる)まで待機します。
<signal-name>
受信(待機)するシグナルの名前を指定します。
「/SI」を指定せずにシグナル名(<signal-name>)を指定した場合はシグナル受信構文の扱いになります。
なお、既に同じ名前のシグナルを待機している Waitfor がいる場合は、その名前を指定することはできません。

解説

Waitfor はプロセス・ネットワークを超えてシグナルを送受信する際に使用します。バッチファイル等で使用すると、「特定の処理が終わるまで待機する」「特定の処理が終わったことを通知する」といったやり取りを行うことができます。

内部的には、Waitfor は mailslot を使用してシグナルの送受信を行います。mailslot の名前は「\\<computer>\mailslot\WAITFOR.EXE\<signal-name>」が使われ、送信時に <computer> を指定しなかった場合は「*」が、シグナル受信の待機を行う際は「.」が使用されます。

※ /S を省略した場合「\\*\mailslot\~」の名前を使ってシグナル送信が行われます。シグナル送信時に「\\.\mailslot\~」の名前は使用されないため、自分自身のコンピューターに送信する場合は必ず「/S」オプションで自分自身のコンピューター名または「127.0.0.1」を指定する必要があります。

サンプル1

waitfor HogeSignal

「HogeSignal」というシグナル名を使って待機します。タイムアウト時間が指定されていないため、シグナルを受信するかプログラムを強制終了(Ctrl+C)するまで待ち続けます。

サンプル2

waitfor /S 127.0.0.1 /SI HogeSignal

「HogeSignal」というシグナル名を使って自分自身のコンピューターにシグナルを送信します。別ウィンドウで Waitfor を使って「HogeSignal」を待機している処理があれば、その待機が終了して処理が進みます。