退出 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 命令而不触发关机功能的主要内容,如果未能解决你的问题,请参考以下文章