プロセス制御関数

PHP マニュアル
前のページ |  | 次のページ

# LXXXIIプロセス制御関数

PHPがサポートするプロセス制御関数は、UNIX形式のプロセス生成、プロ セス実行、シグナル処理、プロセス終了機能を実装しています。 プロセス制御は、Webサーバ環境で有効にするべきではなく、プロセス制 御関数のどれかがWebサーバ環境で使用された場合には、予期しない結果 を生じる可能性があります。

この文書は、プロセス制御関数の一般的な使用法を説明しようとするもの です。UNIXのプロセス制御に関する詳細な情報については、fork(2), waitpid(2) and signal(2)のようなシステムのドキュメントや、 [Advanced Programming in the UNIX Environment by W. Richard Stevens (Addison-Wesley)]のような優れた参考書 を読まれることを推奨します。

PHPがサポートするプロセス制御機能は、デフォルトでは有効となってい ません。プロセス制御機能を有効にするには、PHPをコンパイルする際に configure のオプションに --enable-pcntl を付ける必要があります。

> 注意 現在、このモジュールは非UNIX環境(Windows)では動作しません。

以下のシグナルのリストは、プロセス制御関数でサポートされているもの です。これらのシグナルのデフォルト動作の詳細については、 signal(7) のマニュアルを参照下さい。

表 1サポートされるシグナル

`SIGFPE` | `SIGCONT` | `SIGKILL`
`SIGSTOP` | `SIGUSR1` | `SIGTSTP`
`SIGHUP` | `SIGUSR2` | `SIGTTIN`
`SIGINT` | `SIGSEGV` | `SIGTTOU`
`SIGQUIT` | `SIGPIPE` | `SIGURG`
`SIGILL` | `SIGALRM` | `SIGXCPU`
`SIGTRAP` | `SIGTERM` | `SIGXFSZ`
`SIGABRT` | `SIGSTKFLT` | `SIGVTALRM`
`SIGIOT` | `SIGCHLD` | `SIGPROF`
`SIGBUS` | `SIGCLD` | `SIGWINCH`
`SIGPOLL` | `SIGIO` | `SIGPWR`
`SIGSYS` | `` | ``

# プロセス制御の例

この例は、シグナルハンドラを有するデーモンプロセスをフォークオフ します。

例 1プロセス制御の例
    <?php

    $pid = pcntl_fork();
    if ($pid == -1) {
         die("could not fork");
    } else if ($pid) {
         exit(); // 親プロセスの場合
    } else {
         // 子プロセスの場合
    }

    // 制御側の端末からデタッチ
    if (!posix_setsid()) {
        die("could not detach from terminal");
    }

    // シグナルハンドラを設定
    pcntl_signal(SIGTERM, "sig_handler");
    pcntl_signal(SIGHUP, "sig_handler");

    // 無限ループでタスク実行
    while(1) {

        // 何か面白いことをここで行う

    }

    function sig_handler($signo) {

         switch($signo) {
             case SIGTERM:
                 // 終了タスクを処理
                 exit;
                 break;
             case SIGHUP:
                 // 再起動タスクを処理
                 break;
             default:
                 // その他の全てのシグナルを処理
         }

    }

    ?>

前のページ | ホーム | 次のページ
pg_update | 上に戻る | pcntl_exec