1. 程式人生 > >Linuxx環境下,使用PHP創建一個守護進程

Linuxx環境下,使用PHP創建一個守護進程

可能 true href ref manual 代碼 規則 sets else

<?php
    $pid = pcntl_fork(); // fork
    if ($pid < 0)
        exit;
    else if ($pid) // parent
        exit;
    else { // child
    
        $sid = posix_setsid();
        
        if ($sid < 0)
            exit;
            
        for($i = 0; $i <= 60; $i++) { // do something for 5 minutes
            sleep(5);
        }
    }
?>

  這是php官方手冊給出的方法,不過在Unix環境高級編程中有這樣一個提示:在基於System V的系統中,有些人建議再次焦勇fork,終止父進程,繼續使用子進程中的守護進程。這就保證了守護進程不是會話首進程,於是按照System V規則,可以防止它取得控制終端。

  所以可能以下代碼會更好一些:

<?php
    $pid = pcntl_fork(); // fork
    if ($pid < 0)
        exit(‘fork fail‘);
    else if ($pid) // parent
        exit(0);
    else { // child
    
        $sid = posix_setsid();
        
        if ($sid < 0)
            exit(‘set sid fail‘);

        $pid = pcntl_fork();

        if ($pid < 0)
            exit(‘fork fail‘);

        else if ($pid)  //parent process
            eixt(0);
        else  { //chlid
            //code ....
       exit(0);  } } ?>

  

Linuxx環境下,使用PHP創建一個守護進程