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)]のような優れた参考書 を読まれることを推奨します。

注意この拡張モジュールはWindows環境では利用できません。

要件

これらの関数は、標準モジュールの一部と して利用可能であり、常に使用できます。

インストール手順

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

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

実行用の設定

この拡張モジュールは設定ディレクティブを全く 定義しません。

リソース型

この拡張モジュールはリソース型を全く定義し ません。

定義済みの定数

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

WNOHANG (integer)

WUNTRACED (integer)

SIG_IGN (integer)

SIG_DFL (integer)

SIG_ERR (integer)

SIGHUP (integer)

SIGINT (integer)

SIGQUIT (integer)

SIGILL (integer)

SIGTRAP (integer)

SIGABRT (integer)

SIGIOT (integer)

SIGBUS (integer)

SIGFPE (integer)

SIGKILL (integer)

SIGUSR1 (integer)

SIGSEGV (integer)

SIGUSR2 (integer)

SIGPIPE (integer)

SIGALRM (integer)

SIGTERM (integer)

SIGSTKFLT (integer)

SIGCLD (integer)

SIGCHLD (integer)

SIGCONT (integer)

SIGSTOP (integer)

SIGTSTP (integer)

SIGTTIN (integer)

SIGTTOU (integer)

SIGURG (integer)

SIGXCPU (integer)

SIGXFSZ (integer)

SIGVTALRM (integer)

SIGPROF (integer)

SIGWINCH (integer)

SIGPOLL (integer)

SIGIO (integer)

SIGPWR (integer)

SIGSYS (integer)

SIGBABY (integer)

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

例 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:
             // その他の全てのシグナルを処理
     }

}

?>

以下も参照下さい:

POSIX関数の節を参照することも有 用でしょう。

目次
pcntl_exec --  カレントのプロセス空間で指定したプログラムを実行する
pcntl_fork -- 現在実行中のプロセスをフォークする
pcntl_signal -- シグナルハンドラを設定する
pcntl_waitpid -- 待つかフォークした子プロセスのステータスを返す
pcntl_wexitstatus --  終了した子プロセスのリターンコードを返す
pcntl_wifexited --  ステータスコードが正常終了を表す場合に TRUE を返す
pcntl_wifsignaled --  ステータスコードがシグナルによる終了を表す場合に TRUE を返す
pcntl_wifstopped --  子プロセスが現在停止している場合、TRUE を返す
pcntl_wstopsig --  子プロセスを停止させたシグナルを返す
pcntl_wtermsig --  子プロセスの終了を生じたシグナルを返す