Cet article présente principalement deux méthodes d'implémentation courantes du processus démon PHP. Il analyse les principes du processus démon PHP, les méthodes d'implémentation associées et les précautions de fonctionnement sous la forme d'exemples spécifiques. Les amis dans le besoin peuvent s'y référer
Les exemples de cet article décrivent deux méthodes courantes d'implémentation des démons PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :La première façon est d'utiliser nohup et & ensemble.
Ajoutez le symbole & après la commande pour permettre au processus démarré de s'exécuter en arrière-plan sans occuper la console. La console peut également exécuter d'autres commandes. Ici, j'utilise une boucle infinie. est utilisé pour la démonstration. Le code est le suivant :<?php while(true){ echo time().PHP_EOL; sleep(3); }
[root@localhost php]# php deadloop.php & [1] 3454 [root@localhost php]# ps aux | grep 3454 root 3454 0.0 0.8 284544 8452 pts/0 T 18:06 0:00 php deadloop.php root 3456 0.0 0.0 103316 896 pts/0 S+ 18:08 0:00 grep 3454 [1]+ Stopped php deadloop.php [root@localhost php]#
[root@localhost php]# fg php deadloop.php 1470996682 1470996685 1470996688 1470996691
SIGHUP sera se produisent dans les trois situations suivantes. Ce qui suit est envoyé au processus correspondant :
1. Lorsque le terminal est fermé, le signal est envoyé au premier processus de session et le processus est soumis en tant que travail (qui c'est-à-dire le processus soumis avec le symbole &)2 . Lorsque le premier processus de la session se termine, ce signal est envoyé à chaque processus du groupe de processus de premier plan de la session
3. Si le processus parent se termine, le groupe de processus devient un groupe de processus orphelin et certains processus du groupe de processus sont arrêtés (signal SIGSTOP ou SIGTSTP reçu), le signal sera envoyé à chaque processus du groupe de processus.
<?php declare(ticks = 1); pcntl_signal(SIGHUP, function(){ // 这地方处理信号的方式我们只是简单的写入一句日志到文件中 file_put_contents('logs.txt', 'pid : ' . posix_getpid() . ' receive SIGHUP 信号' . PHP_EOL); }); while(true){ echo time().PHP_EOL; sleep(3); }
[root@localhost php]# nohup php deadloop.php
[root@localhost php]# ls cmd.sh deadloop.php getPhoto.php nohup.out pics [root@localhost php]# tail -f nohup.out 1470999772 1470999775 1470999778 1470999781 1470999784 1470999787 1470999790 1470999793 1470999796 1470999799 1470999802
[root@localhost ~]# ps -ef | grep 3554 root 3554 3497 0 19:09 pts/0 00:00:00 php deadloop.php root 3575 3557 0 19:10 pts/1 00:00:00 grep 3554 [root@localhost ~]# ps -ef | grep 3554 root 3554 1 0 19:09 ? 00:00:00 php deadloop.php root 3577 3557 0 19:10 pts/1 00:00:00 grep 3554 [root@localhost ~]#
Conclusion : Ainsi, lorsque nous combinons les méthodes nohup et &, le processus démarré n'occupera pas la console et ne s'appuiera pas sur la console , une fois la console fermée, le processus est adopté par le processus n°1 et devient un processus orphelin. Ceci est très similaire au mécanisme d'un processus démon.
[root@localhost php]# nohup php deadloop.php >logs.txt 2>error.txt & [1] 3612 [root@localhost php]# ps -ef |grep 3612 root 3612 3557 0 19:18 pts/1 00:00:00 php deadloop.php root 3617 3557 0 19:19 pts/1 00:00:00 grep 3612 [root@localhost php]#
La deuxième méthode d'implémentation consiste à l'implémenter via du code selon les règles et les caractéristiques du processus démon , La plus grande caractéristique du processus démon est qu'il est séparé du terminal utilisateur et de la Session , voici le code implémenté, et les endroits clés sont commentés.
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!