Programming Field

Waitfor - DOS/Windows コマンド一覧

[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」を待機している処理があれば、その待機が終了して処理が進みます。