PHP exec() 使用内存问题

4

对于这个问题,似乎找不到一个明确的答案。

在PHP中使用exec()调用shell命令时,shell命令使用的内存是否计入PHP脚本所给定的内存限制?

我知道,如果命令生成了大量输出,并且该输出被捕获在$ouput(第二个)参数中的exec()中,则返回的数据可能会超出PHP内存限制。然而,假设所有输出都被发送到一个文件,如果exec()命令需要128M内存才能运行,那么拥有64M内存限制的PHP脚本是否能够运行它?

<?php
exec('command_using_128M_memory >/dev/null 2>&1');

我假设您使用的是 PHP5.3+ 版本。

1个回答

7
exec() 命令不直接计入 PHP 的内存限制,因为该进程是在 PHP 进程之外单独执行的。但是,如果您使用任何输出变量与该命令,则它们将计入限制。
因此,如果您有一个生成大量冗长日志文件的文件,并且正在捕获该日志,则会计入内存限制。

谢谢。我怀疑可能是这种情况,但需要确定才能依赖它。我想PHP会跟踪直接分配给脚本的内存,但不关心任何子进程为自己请求的内存。 - Jason
2
我不太确定这是否正确。我在使用exec()时遇到了PHP内存耗尽的问题,并没有指定返回值。 - John Hunt

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