この例は、シグナルハンドラを有するデーモンプロセスをフォークします。
例1 プロセス制御の例
<?php
declare(ticks=1);
$pid = pcntl_fork();
if ($pid == -1) {
die("fork できません");
} else if ($pid) {
exit(); // 親プロセスの場合
} else {
// 子プロセスの場合
}
// 制御側の端末からデタッチ
if (posix_setsid() == -1) {
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:
// その他の全てのシグナルを処理
}
}
?>