PHPプログラムデーモン化
一般的なServerプログラムは、システムのバックグラウンドで実行されます.これは、通常のインタラクティブコマンドラインプログラムとは大きく異なります.glibcにはdaemonという関数があります.この関数を呼び出すと、現在のプロセスが端末から離れてデーモンプロセスになります.詳細はman daemonを参照してください.PHPにはしばらくこの関数はありませんが、興味があればPHPの拡張関数を書いて実現することができます.
PHPコマンドラインプログラムのデーモン化には2つの方法がある:一、nohupを使用する
ここではガードプロセス化を実現した.
php myprogを単独で実行する.phpは、ctrl+cを押すとプログラムの実行が中断され、現在のプロセスおよびサブプロセスがkillされます.
php myprog.php&,このように実行プログラムもバックグラウンドで実行されるが,実際には端末に依存し,ユーザが端末を終了するとプロセスが殺される.二、PHPコードを用いて実現
上のコードでデーモン化を実現し、PHPプログラムをバックグラウンドで実行する必要がある場合は、カプセル化された関数daemonize()を1回呼び出すだけでよい.注意:標準入出力のリダイレクトはここでは実現されていません.
PHPコマンドラインプログラムのデーモン化には2つの方法がある:一、nohupを使用する
nohup php myprog.php > log.txt &
ここではガードプロセス化を実現した.
php myprogを単独で実行する.phpは、ctrl+cを押すとプログラムの実行が中断され、現在のプロセスおよびサブプロセスがkillされます.
php myprog.php&,このように実行プログラムもバックグラウンドで実行されるが,実際には端末に依存し,ユーザが端末を終了するとプロセスが殺される.二、PHPコードを用いて実現
function daemonize()
{
$pid = pcntl_fork();
if ($pid == -1)
{
die("fork(1) failed!
");
}
elseif ($pid > 0)
{
//
exit(0);
}
// session
posix_setsid();
$pid = pcntl_fork();
if ($pid == -1)
{
die("fork(2) failed!
");
}
elseif ($pid > 0)
{
// ,
exit(0);
}
}
daemonize();
sleep(1000);
上のコードでデーモン化を実現し、PHPプログラムをバックグラウンドで実行する必要がある場合は、カプセル化された関数daemonize()を1回呼び出すだけでよい.注意:標準入出力のリダイレクトはここでは実現されていません.