pcntl_signal
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
pcntl_signal — シグナルハンドラを設定する
説明
pcntl_signal
( int $signo
, callable|int $handler
[, bool $restart_syscalls
= true
] ) : bool
pcntl_signal() 関数は、signo
が指すシグナルに関するハンドラを新たに設定するか、既存のハンドラを置き換えます。
パラメータ
signo
シグナル番号。
handler
シグナルハンドラ。callable を渡すと、それを実行してシグナルを処理します。 あるいは、グローバル定数
SIG_IGN
またはSIG_DFL
を渡すこともできます。それぞれ、シグナルを無視することとデフォルトのシグナルハンドラを復活させることを表します。callable を渡す場合は、次のシグネチャを実装したものでなければいけません。
handler ( int
$signo
) : voidsigno
- 処理するシグナル。
siginfo
- OS が siginfo_t 構造体をサポートしている場合、 これはシグナルに依存するシグナル情報の配列になります。
注意:
オブジェクトのメソッドをハンドラとして指定した場合には、 そのハンドラを別のものに変えたりスクリプトが終了したりするまでは オブジェクトの参照カウントが増加しないことに注意しましょう。
restart_syscalls
再起動のシステムコールに対応するかどうかを設定します。
返り値
成功した場合に true
を、失敗した場合に false
を返します。
変更履歴
バージョン | 説明 |
---|---|
7.1.0 | PHP 7.1.0以降、ハンドラコールバックは特定のシグナルの signinfo を含む 2 番目の引数を与えられます。
このデータは、OS が signinfo_t 構造体を持つ場合のみ提供されます。 OS が siginfo_t を実装していない場合は NULL が提供されます。 |
例
例1 pcntl_signal() の例
<?php// tick を使用しなければなりませんdeclare(ticks = 1);// シグナルハンドラ関数function sig_handler($signo){ switch ($signo) { case SIGTERM: // シャットダウンの処理 exit; break; case SIGHUP: // 再起動の処理 break; case SIGUSR1: echo "SIGUSR1 を受け取りました...\n"; break; default: // それ以外のシグナルの処理 }}echo "シグナルハンドラを設定します...\n";// シグナルハンドラを設定しますpcntl_signal(SIGTERM, "sig_handler");pcntl_signal(SIGHUP, "sig_handler");pcntl_signal(SIGUSR1, "sig_handler");// あるいは、オブジェクトも指定できます// pcntl_signal(SIGUSR1, array($obj, "do_something"));echo "自分自身に SIGUSR1 シグナルを送信します...\n";// SIGUSR1 をカレントのプロセス ID に送信します// posix_* 関数を使うには posix 拡張モジュールが必要ですposix_kill(posix_getpid(), SIGUSR1);echo "終了\n";?>
注意
pcntl_signal() は、既存のシグナルハンドラがある場合にはそれを上書きします。