退出 php 命令而不触发关机功能

Posted

技术标签:

【中文标题】退出 php 命令而不触发关机功能【英文标题】:exiting from php command without triggering shutdown functions 【发布时间】:2013-02-19 11:07:54 【问题描述】:

如何退出 php 脚本(例如使用 exit() 函数)但不触发所有先前注册的关闭函数(使用 register_shutdown_function)?

谢谢!

编辑:或者,有没有办法从所有注册的关闭功能中清除?

【问题讨论】:

确保第一个注册的关闭函数包含调用exit()的路径 我正在使用一个非常复杂的系统,实际上我不知道哪个是第一个注册的关闭函数。我只是想退出而不调用关闭函数,所以我可以轻松调试。 如果您想轻松调试,请使用调试器(如 xdebug),您可以在其中设置断点和检查值等 【参考方案1】:

如果进程被 SIGTERM 或 SIGKILL 信号杀死,则不会执行关闭函数。

posix_kill(posix_getpid(), SIGTERM);

【讨论】:

【参考方案2】:

不要直接使用 register_shutdown_function。创建一个管理所有关闭功能的类,并拥有自己的功能和启用属性。

class Shutdown 

    private static $instance = false;
    private $functions;
    private $enabled = true;

    private function Shutdown() 
        register_shutdown_function(array($this, 'onShutdown'));
        $this->functions = array();
    

    public static function instance() 
        if (self::$instance == false) 
            self::$instance = new self();
        

        return self::$instance;
    

    public function onShutdown() 
        if (!$this->enabled) 
            return;
        

        foreach ($this->functions as $fnc) 
            $fnc();
        
    

    public function setEnabled($value) 
        $this->enabled = (bool)$value;
    

    public function getEnabled() 
        return $this->enabled;
    

    public function registerFunction(callable $fnc) 
        $this->functions[] = $fnc;
    


【讨论】:

以上是关于退出 php 命令而不触发关机功能的主要内容,如果未能解决你的问题,请参考以下文章

Linux关机重启退出

Linux 命令初识

React:在网站退出时执行功能,而不发出警报警告

Linux 基础操作命令

退出编辑器而不退出 psql

linux下退出终端,让PHP程序继续执行的命令