Karp 的技术博客

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

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

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

php

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2018年10月13日 04:05
4

目录

来自 《PHP 信号量关闭进程》