Comment PHP protège les processus en arrière-plan dans l'environnement Linux

零到壹度
Libérer: 2023-03-23 17:28:01
original
1540 Les gens l'ont consulté

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 :

  1. <?php  
      
    Class Daemon{  
          
        /** 
         * 初始化一个守护进程 
         * @throws Exception 
         */  
        public function init(){  
            //创建一个子进程  
            $pid = pcntl_fork();  
              
            if ($pid == -1) {  
                throw new Exception(&#39;fork子进程失败&#39;);  
            } elseif ($pid > 0) {  
                //父进程退出,子进程变成孤儿进程被1号进程收养,进程脱离终端  
                exit(0);  
            }  
              
            //创建一个新的会话,脱离终端控制,更改子进程为组长进程  
            $sid = posix_setsid();  
            if ($sid == -1) {  
                throw new Exception(&#39;setsid fail&#39;);  
            }  
              
            //修改当前进程的工作目录,由于子进程会继承父进程的工作目录,修改工作目录以释放对父进程工作目录的占用。  
            chdir(&#39;/&#39;);  
              
            /** 
             * 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 
             * 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 
             */  
            $pid = pcntl_fork();  
            if ($pid == -1) {  
                throw new Exception(&#39;fork子进程失败&#39;);  
            } elseif ($pid > 0) {  
                //再一次退出父进程,子进程成为最终的守护进程  
                exit(0);  
            }  
            //由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符  
            fclose(STDIN);  
            fclose(STDOUT);  
            fclose(STDERR);  
        }  
    }  
      
    $daemon = new Daemon();  
    $daemon->init();  
      
    //处理业务代码  
    while(true) {  
        file_put_contents(&#39;/usr/local/src/log.txt&#39;, time().PHP_EOL, FILE_APPEND);  
        sleep(5);  
    }
    Copier après la connexion

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 :

  1. nohup php /usr/local/src/daemon.php &
    Copier après la connexion

3. Afficher la sortie du journal

Sur la ligne de commande, saisissez :

tail -f /usr/local/src/log.txt
Copier après la connexion

    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 :

  1. ps -ef | grep "php /usr/local/src/daemon.php"
    Copier après la connexion

Ensuite, tuez le processus via ce PID

  1. 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!