编程语言

PHP 信号量关闭进程

By karp 4743 Views 1 MIN READ 0 Comments

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

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

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

本文由 karp 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:https://www.ikarp.top/index.php/archives/300.html

标签: php

0 评论