美文网首页
PHP信号处理

PHP信号处理

作者: 雷雨leiyu | 来源:发表于2021-05-14 15:08 被阅读0次

PHP5.3.0起支持pcntl_signal系列进程控制函数可以对信号进行安装、分发等操作。

信号处理函数

  • pcntl_signal():安装信号;
  • pcntl_signal_dispatch():分发信号;
  • pcntl_sigwaitinfo():等待信号;

信号类别

  • SIGTERM:信号触发命令:kill pid、kill -15 pid 、kill -SIGTERM等;
  • SIGINT:程序终止(interrupt)信号,通常由ctrl+c触发;
  • SIGKILL:触发命令:kill -9 pid;
  • SIGHUP:挂断信号,通常父进程终止后向子进程组发送该信号;
  • SIGALRM:定时器信号;

简单案例

// 安装信号
echo "开始安装信号...\n";
pcntl_signal(SIGHUP, function($signal) {
  echo "信号被调用!\n";
});
// 发出信号
echo "发出信号...\n";
posix_kill(posix_getpid(), SIGHUP);
// 分发信号
echo "开始分发信号...\n";
pcntl_signal_dispatch();
echo "完成\n";
/*
开始安装信号...
发出信号...
开始分发信号...
信号被调用
完成
*/

复杂点案例

class Listener
{
    public function __construct()
    {
        pcntl_signal(SIGTERM,   array($this, "stop"));
        pcntl_signal(SIGINT,    array($this, "stop"));
        pcntl_signal(SIGHUP,    array($this, "sighup"));
        pcntl_signal(SIGALRM,   array($this, "alarm"), true);
        set_error_handler(array($this, "errorHandler"));
    }
    public function errorHandler($errno, $errstr, $errfile, $errline)
    {
        if (!(error_reporting() & $errno)) {
            // This error code is not included in error_reporting
            return;
        }

        switch ($errno) {
            case E_WARNING:
                throw new \Exception("PHP WARNING: [$errno] $errstr $errfile Line:$errline");
                return true;
            case E_NOTICE:
                throw new \Exception("PHP NOTICE: [$errno] $errstr $errfile Line:$errline");
                return true;
            default:
                break;
        }

        return false;
    }
    abstract function stop($signo);
}

相关文章

  • PHP信号处理

    PHP5.3.0起支持pcntl_signal系列进程控制函数可以对信号进行安装、分发等操作。 信号处理函数 pc...

  • PHP信号处理的方式

    这是pcntl模块初始化的代码。 PHP_MINIT_FUNCTION(pcntl){ php_registe...

  • 【laravel:5.1】Pagination

    Paginator.php // 处理简单分页 LengthAwarePaginator.php // 处理复杂...

  • php学习笔记(六)

    PHP异常处理 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过thro...

  • 信号处理

    信号处理

  • 信号与信号处理

    两本书 近期连续阅读两本有关如何处理市场“信号”的书,一本是信号-社会契约与地缘政治如何影响世界经济,一本是宽客-...

  • 信号二

    信号的几种状态 抵达:表示一个信号到达,要处理的信号。阻塞:表示当信号到达时使信号阻塞,当解除阻塞时再处理信号,阻...

  • 学习笔记:信号处理

    信号处理是对各种类型的电信号,按照预期目的和要求进行加工过程的统称。对模拟信号的处理称为模拟信号处理,对数字信号的...

  • 用PCNTL实现PHP多进程

    PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在We...

  • PHP信号管理

    有 两个信号可以停止进程:SIGTERM和SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号,根据您的...

网友评论

      本文标题:PHP信号处理

      本文链接:https://www.haomeiwen.com/subject/lijqjltx.html