0

短版

我想,在 python, subprocess.call(['php', '/path/somescript.php'])中,php 脚本的第一行基本上是"echo 'Here!';". 但是subprocess.call返回错误代码-11,并且 php 脚本无法执行其第一行并将任何内容回显到输出。这一切都发生在 Ubuntu Server 12.04.2 和 Ubuntu Desktop 12.04.2 上。

任何人都可以指出-11返回代码可能意味着什么的方向吗?(它是来自 python、系统还是 php 命令?

有几次,我看到它深入到 php 脚本中,然后通过打印“zend_mm_heap 已损坏”并返回而失败1

问题的更具描述性的版本:

我有一个 python 脚本,在使用 运行一些 phpunit 测试后subprocess.call(['phpunit', ...]),想要运行另一个 php 脚本来收集运行测试时收集的代码覆盖率数据,方法是subprocess.call(['php', '/path/coverage_collector.php']).

几个月来,脚本运行良好,但今天,在添加了几个文件和测试之后,它开始失败(不是 100% 的时间,大约 5-10% 的时间它工作)。

当它失败时,subprocess.call返回-11,并且第一行coverage_collector.php没有设法将其消息回显到标准输出。有几次它深入到 php 脚本中,并以错误代码失败1并打印"zend_mm_heap corrupted".

我有一个目录结构,其中每个文件夹可能包含子文件夹,每个文件夹都执行其单元测试,然后收集该文件夹及其子文件夹的覆盖率数据。

该脚本在所有文件夹及其子文件夹上都可以正常工作(执行所有测试并收集所有覆盖范围),并且过去也可以在根级文件夹上正常工作(目前对于许多具有相同功能的较小项目也可以正常工作确切的结构和脚本) - 直到今天,在一个足够无辜的代码签入后它开始失败之后,使用该脚本向其中一个 php 项目添加了一些文件和测试。

奇怪的是,它在这个奇怪的地方失败了——在尝试调用 php 命令时,甚至没有执行 php 脚本的第一行,而这发生在同一个 php 脚本执行了数次之后的几秒钟。其他文件夹,工作正常。

我怀疑这可能是因为根级别脚本只是有更多数据要处理 - 将它自己的覆盖范围与所有子文件夹的覆盖范围相结合(这可能解释了 zend 堆损坏,当这种情况发生时),但是仍然没有解释为什么大多数时候调用失败-11,并且不让 php 脚本甚至开始收集覆盖率数据。

有任何想法吗?

4

1 回答 1

0

似乎是由太多覆盖数据耗尽 PHP_CodeCoverage_Report_HTML 引起的。不知道为什么 php 脚本输出被抑制,这让我相信脚本从未运行过。

使用 ini_set('memory_limit', '2048M'); 请求更多内存后 在 php 脚本开始时,成功率急剧上升(到目前为止,成功构建了 5/6)。

我想我需要在 php/zend 中使用内存管理来正确处理这个问题。

于 2013-08-01T20:07:38.143 回答