一般に、サーバープログラムはシステムのバックグラウンドで実行されますが、これは通常の対話型コマンドラインプログラムとは大きく異なります。 glibc には関数デーモンがあります。この関数を呼び出すと、現在のプロセスがターミナルから離れ、デーモン プロセスになる可能性があります。詳細については、「man デーモン」を参照してください。もちろん、現在のところ PHP にはそのような関数はありません。興味がある場合は、PHP 拡張関数を作成して実装することができます。
PHP コマンドライン プログラムのデーモン化を実装するには 2 つの方法があります:
1. nohupを使用する
コードをコピーします。コードは次のとおりです:
デーモン化はここで実装されます。
php myprog.php を単独で実行します。ctrl+c を押すと、プログラムの実行が中断され、現在のプロセスと子プロセスが強制終了されます。
php myprog.php & 実行プログラムもバックグラウンドで実行されますが、実際にはユーザーがターミナルを終了するとプロセスが強制終了されます。
2. PHPコードを使用して実装します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
関数デーモン化() { $pid = pcntl_fork(); if ($pid == -1) { die("fork(1) が失敗しました!n"); } エルセイフ ($pid > 0) { //ユーザー終了によってプロセスを開始させます 終了(0); }
//ターミナルから離脱するには、ターミナルとは別の新しいセッションを作成します posix_setsid();
$pid = pcntl_fork(); if ($pid == -1) { die("fork(2) が失敗しました!n"); } エルセイフ ($pid > 0) { //親プロセスが終了し、残った子プロセスが最後の独立したプロセスになります 終了(0); } }
デーモン化(); 睡眠(1000);
|
注: ここでは標準入出力のリダイレクトは実装されていません。