>  기사  >  백엔드 개발  >  PHP 프로세스 신호 처리

PHP 프로세스 신호 처리

不言
不言원래의
2018-05-02 09:10:252111검색

이 기사는 주로 특정 참조 가치가 있는 PHP 프로세스 신호 처리를 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.

<?php
while (1)
 {
     echo "I am doing something important\n";    
     echo "If i am interruptted, the data will be corrupted\n";    
     echo "Be careful\n";    
     echo "\n\n";
    sleep(5);
}


이런 PHP 스크립트가 있다고 가정해 보겠습니다. SIGINT 및 SIGTERM과 같은 프로세스 신호를 수신할 때 정보를 출력하고 스크립트를 종료하려면?

pcntl_signal 및 pcntl_signal_dispatch 함수를 사용하고(PHP는 이 두 함수를 사용하려면 pcntl 확장을 설치해야 함) 코드를 참조하세요.

<?php/**
 * 信号ID和信号名称对应关系,没注释掉的信号都是可以通过pcntl_signal函数注册的
 */
 $GLOBALS[&#39;G_SIG_MAP&#39;] = array(
     1 => &#39;SIGHUP&#39;,    
     2 => &#39;SIGINT&#39;,    
     3 => &#39;SIGQUIT&#39;,    
     4 => &#39;SIGILL&#39;,    
     5 => &#39;SIGTRAP&#39;,    
     6 => &#39;SIGABRT&#39;,    
     7 => &#39;SIGEMT&#39;,    
     8 => &#39;SIGFPE&#39;,    
     //9 => &#39;SIGKILL&#39;,
    10 => &#39;SIGBUS&#39;,    
    11 => &#39;SIGSEGV&#39;,    
    12 => &#39;SIGSYS&#39;,    
    13 => &#39;SIGPIPE&#39;,    
    14 => &#39;SIGALRM&#39;,    
    15 => &#39;SIGTERM&#39;,    
    16 => &#39;SIGURG&#39;,    
    //17 => &#39;SIGSTOP&#39;,
    18 => &#39;SIGTSTP&#39;,    
    19 => &#39;SIGCONT&#39;,    
    20 => &#39;SIGCHLD&#39;,    
    21 => &#39;SIGTTIN&#39;,    
    22 => &#39;SIGTTOU&#39;,    
    23 => &#39;SIGIO&#39;,    
    24 => &#39;SIGXCPU&#39;,    
    25 => &#39;SIGXFSZ&#39;,    
    26 => &#39;SIGVTALRM&#39;,    
    27 => &#39;SIGPROF&#39;,    
    28 => &#39;SIGWINCH&#39;,    
    29 => &#39;SIGINFO&#39;,    
    30 => &#39;SIGUSR1&#39;,    
    31 => &#39;SIGUSR2&#39;,
);
/**
 * 进程信号处理函数
 * @param int $signo 信号ID
 */function signalHandler($signo) {
    if (isset($GLOBALS[&#39;G_SIG_MAP&#39;][$signo])) {  
    echo "Caught signal {$GLOBALS[&#39;G_SIG_MAP&#39;][$signo]}, exit\n";
    } else {      
              echo "Caught unknown signal:$signo";
    }    
    exit();
}foreach ($GLOBALS[&#39;G_SIG_MAP&#39;] as $id => $name) {
    pcntl_signal($id, &#39;signalHandler&#39;);
}while (1) {
                echo "I am doing something important\n";    
                echo "If i am interruptted, the data will be corrupted\n";    
                echo "Be careful\n";    echo "\n\n";
    pcntl_signal_dispatch(); // 此函数调用必须放在循环体内
    sleep(5);
}

PHP 프로세스 신호 처리
Linux 셸에서 스크립트를 실행한 다음 kill -2 脚本进程ID 명령을 사용하여 프로세스에 신호를 보내고, 정보를 정상적으로 출력하고 종료합니다.

관련 추천 :

PHP 프로세스 간 통신에 대한 자세한 설명

PHP 프로세스 통신을 기반으로 한 세마포어 및 공유 메모리 통신

PHP 프로세스 잠금 관련 내용

위 내용은 PHP 프로세스 신호 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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