在PHP中获取脚本的退出状态码

7

有没有办法通过exec($cmd, $output, $exitCode)在后台运行一个php脚本并获取其退出状态码?

例如:

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

如果没有包含结尾的“&”,那么$exitCode将按预期工作,否则它始终为0。

请参考此链接 http://stackoverflow.com/questions/1533675/php-exec-return-value-for-background-process-linux - Pradeep Singh
2
不确定,但我认为如果它在后台运行,那么您的代码会在被调用的脚本完成执行之前继续执行,因此无法获取返回的状态码。 - dqhendricks
1
你得到的“0”可能意味着进程已成功发送到后台。 - Álvaro González
2个回答

6

如果有人看到这里,我的解决方案是编写一个以脚本为参数的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) {
 ...
}

1
你在第二个脚本中没有移除 & 吗?这意味着你在任何情况下都没有运行后台进程?你可能想要在后台运行第一个脚本... 可能。 - Khez
@Khez,我发表这篇文章已经有一段时间了,但我认为你是对的。原始解决方案在第一个exec()调用中硬编码了&,并从第二个调用中删除了它,以便处理退出代码。 - Parris Varney
不用担心,我在寻找类似的东西(与后台进程无关),看了被接受的答案并感到有必要指出可能存在的问题... - Khez

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接