>  기사  >  백엔드 개발  >  PHP가 Linux 환경에서 백그라운드 프로세스를 보호하는 방법

PHP가 Linux 환경에서 백그라운드 프로세스를 보호하는 방법

零到壹度
零到壹度원래의
2018-04-13 13:43:461574검색

이 문서의 내용은 Linux 환경에서 PHP가 백그라운드 프로세스를 보호하는 방법을 공유하는 것입니다. 이는 특정 참조 값을 가지고 있습니다. 도움이 필요한 친구는 이를 참조할 수 있습니다

응용 시나리오

일부 다음으로, 메모리나 CPU의 작동 상태를 모니터링하는 등 일부 서비스를 주기적으로 계속 제공해야 합니다. 이는 클라이언트(웹 인터페이스, 모바일 앱 등)와 관련이 없다는 의미입니다. 등)이 닫히면 메모리나 CPU를 모니터링하는 대신 이 비즈니스 시나리오를 처리하기 위해 백그라운드 데몬을 유용하게 사용할 수 있습니다.

필요환경

Linux

구현방법

1.

/usr/local/src/ 디렉터리에서 다음을 생성합니다. 다음과 같은 새로운 daemon.php 스크립트 파일:

<?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);  
}
이 스크립트의 기능은 5초마다 로그 파일에 타임스탬프를 기록하는 것입니다. 예를 들면 다음과 같습니다. , 특정 애플리케이션에서는 다양한 비즈니스에 따라 특정 비즈니스 처리 코드를 작성해야 합니다.

2. 백그라운드 모드에서 PHP 스크립트를 실행합니다.

명령줄에 다음을 입력합니다.

nohup php /usr/local/src/daemon.php &
3.로그 출력을 봅니다. 명령줄,

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

다음 정보가 표시됩니다.

4 php 백그라운드 프로세스를 닫습니다

먼저 P를 찾아야 합니다. ID 프로세스, 명령 :

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

    그런 다음 이 PID
  1. 를 통해 프로세스를 종료하세요.
    1. kill -9 22767

    그 중 22767은 php 백그라운드 프로세스의 PID 번호입니다.

    5. 부팅 시 자체 시작

    이전 단계를 통해 PHP 프로세스를 열고 닫는 방법을 알고 있지만 실제 애플리케이션에서는 매번 수동으로 열 수 없으므로 일부 비즈니스 데이터가 손실되므로 부팅 시 프로세스가 자동으로 실행되도록 해야 합니다. 단계는 다음과 같습니다.

    /etc/rc.local 파일에서 nohup php /usr/local/src/daemon을 변경합니다. php & 이 명령을 추가하면 됩니다.


위 내용은 PHP가 Linux 환경에서 백그라운드 프로세스를 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.