通常、サーバー プログラムはシステムのバックグラウンドで実行されます。これは、通常の対話型コマンド ライン プログラムとは大きく異なります。 glibc には関数デーモンがあります。この関数を呼び出すと、現在のプロセスがターミナルから離れ、デーモン プロセスになる可能性があります。詳細については、「man デーモン」を参照してください。もちろん、現在のところ PHP にはそのような関数はありません。興味がある場合は、PHP 拡張関数を作成して実装することができます。
PHP コマンドライン プログラムのデーモン化を実装するには 2 つの方法があります:
nohup php myprog.php > log.txt &
ここでデーモン化が実現されます。
php myprog.php を単独で実行します。ctrl+c を押すと、プログラムの実行が中断され、現在のプロセスと子プロセスが強制終了されます。
php myprog.php & 実行されたプログラムはバックグラウンドでも実行されますが、実際には端末に依存し、ユーザーが端末を終了するとプロセスが強制終了されます。
function daemonize() {$pid = pcntl_fork();if ($pid == -1) {die("fork(1) failed!\n"); }elseif ($pid > 0) {//让由用户启动的进程退出exit(0); }//建立一个有别于终端的新session以脱离终端posix_setsid();$pid = pcntl_fork();if ($pid == -1) {die("fork(2) failed!\n"); }elseif ($pid > 0) {//父进程退出, 剩下子进程成为最终的独立进程exit(0); } }daemonize();sleep(1000);を実装します。PHP プログラムをバックグラウンドで実行する必要がある場合は、カプセル化された関数 daemonize() を 1 回呼び出すだけで済みます。
注: ここでは標準入出力のリダイレクトはありません。
以上がPHPプログラムのデーモン化例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。