Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

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サポートされるシグナル

SIGFPESIGCONTSIGKILL
SIGSTOPSIGUSR1SIGTSTP
SIGHUPSIGUSR2SIGTTIN
SIGINTSIGSEGVSIGTTOU
SIGQUITSIGPIPESIGURG
SIGILLSIGALRMSIGXCPU
SIGTRAPSIGTERMSIGXFSZ
SIGABRTSIGSTKFLTSIGVTALRM
SIGIOTSIGCHLDSIGPROF
SIGBUSSIGCLDSIGWINCH
SIGPOLLSIGIOSIGPWR
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:
             // その他の全てのシグナルを処理
     }

}

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