Le contenu de cet article est de partager avec vous comment PHP protège le processus en arrière-plan dans l'environnement Linux. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer
<.> Scénarios d'application
Dans certains cas, nous devons continuer à fournir certains services périodiquement, comme la surveillance de l'état de fonctionnement de la mémoire ou du processeur. Ces applications Cela n'a rien à voir avec le client. Cela ne signifie pas que si le client (comme l'interface Web, l'application mobile, etc.) est fermé, nous ne surveillerons pas la mémoire ou le CPU afin de gérer cette affaire. Dans ce scénario, le démon d'arrière-plan peut s'avérer utile.
Environnement requis
Linux
Méthode d'implémentation
1. Préparez le script php
dans /usr/local. Dans le répertoire /src/, créez un nouveau fichier de script daemon.php comme suit :
<?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); }
La fonction de ce script est d'écrire un horodatage dans le fichier journal toutes les 5 secondes. Bien sûr, ce n'est qu'un exemple simple. Dans des applications spécifiques, nous devons également écrire des codes de traitement métier spécifiques basés sur différentes activités.
2. Exécutez le script php en arrière-plan
Sur la ligne de commande, saisissez :
nohup php /usr/local/src/daemon.php &
3. Afficher la sortie du journal
Sur la ligne de commande, saisissez :
tail -f /usr/local/src/log.txt
Nous verrons les informations suivantes :
4. Fermez le processus php en arrière-plan
Tout d'abord, nous devons connaître le PID du processus, commande :
ps -ef | grep "php /usr/local/src/daemon.php"
Ensuite, tuez le processus via ce PID
kill -9 22767
Parmi eux, 22767 est le numéro PID du processus php en arrière-plan.
5. Démarrer automatiquement au démarrage
Grâce aux étapes précédentes, nous savons comment démarrer et fermer un php processus, Cependant, dans les applications réelles, nous ne pouvons pas l'ouvrir manuellement à chaque fois, nous perdrons donc une partie des données commerciales, nous devons donc laisser le processus s'exécuter automatiquement au démarrage. Les étapes sont les suivantes :
<.>Dans le fichier /etc/rc.local, ajoutez la commande nohup php /usr/local/src/daemon.php &.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!