影响关闭函数中的退出代码

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);

但无论我尝试什么,我都无法以任何方式影响退出代码。我在 documentation.

中没有发现任何有用的信息

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

这是 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

应该已经修复了,但是到PHP5.5.30,我自己还在体验中。

我想您可以尝试恢复到 PHP 5.3,据报道它按预期工作。或者您可以查看最新版本之一(截至此答案的 5.6.18 或 7.0.3),看看该错误是否确实已修复。