LEN

PHP 信号量关闭进程
今天修改写脚本需要用到信号量控制脚本下面是信号量控制类 <?php /**...
扫描右侧二维码阅读全文
27
2018/09

PHP 信号量关闭进程

今天修改写脚本需要用到信号量控制脚本
下面是信号量控制类


    <?php
        
    /**
     * Class Signal
     * 信号量
     */
    class Signal
    {
        private static $signal;
    
        private static $runing = true;
    
        /**
         * Signal constructor.
         * @throws
         */
        private function __construct()
        {
            if (PHP_SAPI != 'cli') {
                throw new \Exception('Must CLI Model');
            }
            static::pcntl_signal();
        }
    
        /**
         * 安装信号处理器 kill 2
         */
        private static function pcntl_signal()
        {
            // 三参数必须为false 缺省参数存在bug --disable-posix
            pcntl_signal(SIGINT, function () {
                self::$runing = false;
            }, false);
        }
    
        /**
         * 调用等待信号的处理器
         * @param $runing
         * @return bool
         */
        public static function dispatch()
        {
            self::init();
    
            pcntl_signal_dispatch();
    
            return self::$runing;
        }
    
        /**
         * @desc 初始
         * @return mixed
         * @throws
         *------------------------------------------------------
         */
        private static function init()
        {
            if (!isset(static::$signal)) {
                static::$signal = new self();
            }
    
            return static::$signal;
        }
    
    }

举个栗子:

public function test()
{
    do {
        foreach (range(0, 1000) as $v) {
            echo $v, PHP_EOL;
        }
        echo 'end------------', PHP_EOL;

    } while (Signal::dispatch());
}

嗯 对 原理就是接收到信号 然后终止循环 !

最后修改:2018 年 10 月 13 日 12 : 05 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论