PHP exec 分叉一个进程,使其崩溃返回代码仍为 0


PHP exec forking a process, making it crash return code is still 0

$cmd = "php thisWillCrash.php";
exec($cmd, $op, $return_code);

然后我检查 $return_code 及其 0 表示成功,这是为什么?

我已经尝试了"thisWillCrash.php"的几种变体,包括

trigger_error("Fatal Error", E_USER_ERROR);
include("dasdasdsakdassadsad");

以及将耗尽内存的内存循环,相同的结果返回代码始终为 0。有什么想法吗?

我认为您需要让脚本本身以0以外的状态显式退出

您可以尝试以下方法:

<?php
try {
    throw new Exception;
} catch (Exception $exc) {
    exit(1);
}

除了显式调用exit之外,似乎没有办法从有效的 php 脚本中强制执行非零退出状态.php的main()仅在以下情况下返回非零:

  • 无效的命令行(无效的参数,没有这样的文件等(
  • 内部启动错误
  • 特定模式错误(例如 lint 模式(
  • 解析错误
  • 名为 exit 的 PHP 脚本

因此,获得非零的最简单方法是php nosuchfile.php