在php中获取脚本退出状态码

Posted

技术标签:

【中文标题】在php中获取脚本退出状态码【英文标题】:Getting script exit status code in php 【发布时间】:2010-12-30 17:52:40 【问题描述】:

是否可以通过 exec($cmd, $output, $exitCode) 获取后台运行的 php 脚本的退出状态码?

例如:

exec('php script.php &', $output, $exitCode); 

如果不包含结尾的“&”,则 $exitCode 会按预期工作,否则它始终为 0。

【问题讨论】:

请参考此链接***.com/questions/1533675/… 不是肯定的,但我认为如果它在后台运行,那么您的代码会在被调用脚本完成执行之前继续运行,因此无法获取返回的状态代码。 你得到的'0'可能意味着进程已成功发送到后台。 【参考方案1】:

我发现了一些可能与 Pradeep 的解决方案相当的东西。有人在函数的文档页面上发布了这个。 http://www.php.net/manual/en/function.exec.php#101506

【讨论】:

【参考方案2】:

对于发现自己在这里的任何人,我的解决方案是制作一个将脚本作为参数的 php 脚本。新脚本被调用到后台并适当地处理退出状态。

例如:

$cmd = 'php asynchronous_script.php -p 1';
exec("php script_executor.php -c'$cmd' &");

第二个脚本看起来像

$opts = getOpt('c:');
$cmd = rtrim($opts['c'], '&');
$exitCode = 0;
$output = '';

exec($cmd, $output, $exitCode);

if ($exitCode > 0) 
 ...

【讨论】:

你不是在第二个脚本中删除& 吗?这意味着您在这两种情况下都没有运行后台进程?您可能打算在后台运行第一个脚本......可能。 @Khez 我发布这个已经有一段时间了,但我认为你是对的,原来的解决方案在第一个 exec() 调用中有一个硬编码 & ,并从第二个调用中删除了它它可以处理退出代码。 不用担心,正在寻找类似的东西(与后台进程无关),阅读接受的答案并觉得有必要指出可能的问题......

以上是关于在php中获取脚本退出状态码的主要内容,如果未能解决你的问题,请参考以下文章

$?:退出状态和退出状态码

bash自定义退出状态码exit

delphi中的webbrowser ,如何获取网站返回状态码

CalledProcessError 退出状态码 5

Shell命令的退出状态及错误检查

如何在 getline 管道中获取命令的退出状态?