この記事の内容は、PHP が Linux 環境でバックグラウンド プロセスを保護する方法を共有することです。必要な場合は参考にしてください。
いくつかのシナリオ。次に、メモリや CPU の実行状況の監視など、いくつかのサービスを定期的に提供し続ける必要があります。これらのアプリケーションはクライアント (Web インターフェイス、モバイル アプリなど) とは関係ありません。このビジネス シナリオに対処するには、メモリや CPU を監視する代わりに、バックグラウンド デーモンが役立ちます。
必要な環境
Linux
実装方法
1.phpスクリプトを準備します
/usr/local/src/ ディレクトリに、次のような新しい daemon.php スクリプト ファイル:
<?php Class Daemon{ /** * 初始化一个守护进程 * @throws Exception */ public function init(){ //创建一个子进程 $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子进程失败'); } elseif ($pid > 0) { //父进程退出,子进程变成孤儿进程被1号进程收养,进程脱离终端 exit(0); } //创建一个新的会话,脱离终端控制,更改子进程为组长进程 $sid = posix_setsid(); if ($sid == -1) { throw new Exception('setsid fail'); } //修改当前进程的工作目录,由于子进程会继承父进程的工作目录,修改工作目录以释放对父进程工作目录的占用。 chdir('/'); /** * 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 * 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 */ $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子进程失败'); } elseif ($pid > 0) { //再一次退出父进程,子进程成为最终的守护进程 exit(0); } //由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符 fclose(STDIN); fclose(STDOUT); fclose(STDERR); } } $daemon = new Daemon(); $daemon->init(); //处理业务代码 while(true) { file_put_contents('/usr/local/src/log.txt', time().PHP_EOL, FILE_APPEND); sleep(5); }ログイン後にコピー
2. バックグラウンドモードでphpスクリプトを実行します3. コマンドラインでログ出力を表示します。 、次の情報が表示されます:コマンドラインで次のように入力します:
nohup php /usr/local/src/daemon.php &ログイン後にコピー
tail -f /usr/local/src/log.txt
次の情報が表示されます:
まず、PHP を見つける必要があります。のIDプロセス、コマンド:
ps -ef | grep "php /usr/local/src/daemon.php"ログイン後にコピー
次に、この PID を通じてプロセスを強制終了します
kill -9 22767
このうち、22767はphpバックグラウンドプロセスのPID番号です。
5. 起動時にセルフスタート
これまでの手順で、PHP プロセスを開いたり閉じたりする方法はわかりましたが、実際のアプリケーションでは毎回手動で開くことはできません。ビジネス データが失われるため、起動時にプロセスが自動的に実行されるようにする必要があります。手順は次のとおりです。
/etc/rc.local ファイルで、nohup php /usr/local/src/daemon を変更します。 php & このコマンドを追加するだけです。
以上がPHP が Linux 環境でバックグラウンドプロセスを保護する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。