Home  >  Article  >  Backend Development  >  How PHP protects background processes in Linux environment

How PHP protects background processes in Linux environment

零到壹度
零到壹度Original
2018-04-13 13:43:461541browse

The content of this article is to share with you how PHP protects the background process in the Linux environment. It has certain reference value. Friends in need can refer to it

Application Scenario

In some cases, we need to continue to provide some services periodically, such as monitoring the running status of memory or CPU. These applications It has nothing to do with the client. It does not mean that if the client (such as web interface, mobile app, etc.) is closed, we will not monitor the memory or CPU. In order to deal with this business scenario, the background daemon can come in handy.

Required environment

Linux

Implementation method

1. Prepare the php script

in /usr/local In the /src/ directory, create a new daemon.php script file with the following content:

  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);  
    }

The The function of the script is to write a timestamp to the log file every 5 seconds. Of course, this is just a simple example. In specific applications, we also need to write specific business processing codes based on different businesses.

2. Run the php script in background mode

At the command line, enter:

  1. nohup php /usr/local/src/daemon.php &

3. View the log output

At the command line, enter:

tail -f /usr/local/src/log.txt

    We will see the following message:

##4. Close the php background process

First, we need to find out the PID of the process, command:

    ps -ef | grep "php /usr/local/src/daemon.php"

Then, kill the process through this PID

  1. kill -9 22767

##Among them, 22767 is The PID number of the php background process.

5. Start automatically after booting

Through the previous steps, we know how to start and close a php process. However, in actual applications, we cannot start it manually every time, so we will lose part of the business data, so we must let the process run automatically at boot. The steps are as follows:

In the /etc/rc.local file, add the nohup php /usr/local/src/daemon.php & command.


The above is the detailed content of How PHP protects background processes in Linux environment. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn