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 -- 子プロセスの終了を生じたシグナルを返す