PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

pcntl_signal - シグナルハンドラを設定する | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

pcntl_signal

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

pcntl_signalシグナルハンドラを設定する

説明

bool pcntl_signal ( int $signo , mixed $signinfo )

pcntl_signal() 関数は、signo が指すシグナルに関するハンドラを新たに設定するか、既存のハンドラを置き換えます。

パラメータ

signo

シグナル番号。

handler

シグナルハンドラ。callable を渡すと、それを実行してシグナルを処理します。 あるいは、グローバル定数 SIG_IGN または SIG_DFL を渡すこともできます。それぞれ、シグナルを無視することとデフォルトのシグナルハンドラを復活させることを表します。

callable を渡す場合は、次のシグネチャを実装したものでなければいけません。

void handler ( int $signo )
signo
処理するシグナル。
siginfo
If operating systems supports siginfo_t structures, this will be an array of signal information dependent on the signal.

注意:

オブジェクトのメソッドをハンドラとして指定した場合には、 そのハンドラを別のものに変えたりスクリプトが終了したりするまでは オブジェクトの参照カウントが増加しないことに注意しましょう。

restart_syscalls

再起動のシステムコールに対応するかどうかを設定します。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

変更履歴

バージョン 説明
4.3.0 PHP 4.3.0 以降、PCNTL はシグナルハンドルコールバックの仕組みとして ticks を使用しており、これは以前の仕組みよりずっと高速です。この変更は "user ticks" を使用するのと同じことです。次の例で示すように、 declare() を使用して プログラム中でコールバックの発生を許可する場所を指定し、シグナルハンドラが 正しく動作するようにする必要があります。
7.1.0 As of PHP 7.1.0 the handler callback is given a second argument containing the signinfo of the specific signal. This data is only supplied if the operating system has the signinfo_t structure. If the OS does not implement siginfo_t NULL is supplied.

例1 pcntl_signal() の例

<?php
// PHP 4.3.0 以降では 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");

// あるいは PHP 4.3.0 以降ならオブジェクトも指定できます
// pcntl_signal(SIGUSR1, array($obj, "do_something"));

echo "自分自身に SIGUSR1 シグナルを送信します...\n";

// SIGUSR1 をカレントのプロセス ID に送信します
// posix_* 関数を使うには posix 拡張モジュールが必要です
posix_kill(posix_getpid(), SIGUSR1);

echo 
"終了\n";

?>

注意

pcntl_signal() は、既存のシグナルハンドラがある場合にはそれを上書きします。

参考

  • pcntl_fork() - 現在実行中のプロセスをフォークする
  • pcntl_waitpid() - 待つかフォークした子プロセスのステータスを返す


忘却曲線を使ってこの関数を確実に記憶に残す

フォーラムで「pcntl_signal - シグナルハンドラを設定する」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | pcntl_signal - シグナルハンドラを設定する」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: