php實現簡單的守護進程

前提要安裝有pcntl擴展,可通過php -m查看是否安裝

<?php

class Daemon {
    private $pidfile;

    function __construct() {
        $this->pidfile = dirname(__FILE__).'/daemontest.pid';
    }

    private function startDeamon() {
        if (file_exists($this->pidfile)) {
            echo "The file $this->pidfile exists.\n";
            exit();
       }
   
       $pid = pcntl_fork();
       if ($pid == -1) {
            die('could not fork');
       } else if ($pid) {
           echo 'start ok';
           exit($pid);
       } else {
        // we are the child
           file_put_contents($this->pidfile, getmypid());
           return getmypid();
        }
    }

    private function start(){
        $pid = $this->startDeamon();
        while (true) {
            file_put_contents(dirname(__FILE__).'/test.txt', date('Y-m-d H:i:s'), FILE_APPEND);
            sleep(2);
        }
    }

    private function stop(){
        if (file_exists($this->pidfile)) {
           $pid = file_get_contents($this->pidfile);
           posix_kill($pid, 9); 
           unlink($this->pidfile);
        }
    }

    public function run($argv) {
        if($argv[1] == 'start') {
            $this->start();
        }else if($argv[1] == 'stop') {
            $this->stop();
        }else{
            echo 'param error';
        }
    }

}

$deamon = new Daemon();
$deamon->run($argv);


啓動 php deamon.php start  關閉 php deamon.php stop

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章