影响关闭功能中的退出代码


Influence the exit code within a shutdown function

我正在使用一个连接到远程服务的库。如果连接意外终止,库将生成一个PHP致命错误/未捕获错误异常。

我的PHP脚本是作为守护进程(通过Systemd)运行的,所以我想在一段时间后自动重新启动守护进程以重新连接。所有这些都是在Systemd中设置的,所以如果PHP以4的状态退出,守护进程将在一段时间后重新启动。

PHP默认情况下使用退出代码255来处理致命错误,所以我决定使用类似于以下的关闭函数:

function shutdown() {
    // Do a bit of this and that (e.g. assert 
    // there actually was the relevant error)
    exit(4);
}
register_shutdown_function('shutdown');
trigger_error('Test', E_USER_ERROR);

但无论我尝试什么,我都无法以任何方式影响退出代码。我在文档中找不到任何有用的东西。

是否有任何已知的方法可以在关闭函数内或在生成致命错误后通过其他方式操作退出代码?

这是PHP中的一个错误,多年来显然已经提交了多次:

https://bugs.php.net/bug.php?id=65275

https://bugs.php.net/bug.php?id=62725

https://bugs.php.net/bug.php?id=62294

https://bugs.php.net/bug.php?id=23509

它应该已经被修复了,但从PHP 5.5.30开始,我自己仍然在经历它。

我想您可以尝试恢复到PHP 5.3,据报道它的运行与预期的一样。或者,您可以查看最新发布的版本之一(截至本答案的第5.6.8版或第7.0.3版),看看这个错误是否确实得到了修复。