【发布时间】:2015-05-05 15:29:33
【问题描述】:
我有一个用 PHP 编写的软件,可以运行很长时间,它是通过命令行启动的(不是 Web 应用程序)。我想确保在软件退出时调用一个函数,包括通过 ctrl+c 杀死时。当被信号杀死时,关闭函数(通过 register_shutdown_fucntion() 注册的析构函数和函数)不会被调用。
经过阅读,我意识到我必须在每个相关信号上添加一个处理程序才能调用“exit;”。这样做解决了我的问题并且有效。
我的问题是,在某些情况下,信号没有立即处理。它可能需要几秒钟,几分钟,在某些情况下,根本不处理。就像从未到达处理程序代码一样。我真的不知道从哪里开始调试。我尝试过其他信号(sigkill、sighup 等),行为相同。
我的代码用这些括号
declare(ticks=1)
{...}
我找不到立即治疗的时间和不立即治疗的时间之间的任何相关性。
任何帮助将不胜感激。
【问题讨论】: