zoukankan      html  css  js  c++  java
  • Linux环境下,使用PHP创建一个守护进程

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

      

  • 相关阅读:
    AtomicReference与volatile的区别
    深度剖析ConcurrentHashMap(转)
    ConcurrentHashMap原理分析
    Java Stack源码分析
    Fail-Fast机制详解
    TreeSet源码分析
    状态(State)模式
    原型(Prototype)模式
    职责连模式
    观察者模式(Observer)
  • 原文地址:https://www.cnblogs.com/jixingke/p/7412490.html
Copyright © 2011-2022 走看看