限制shell_exec的执行时间

时间:2012-04-24 05:18:38

标签: php fatal-error shell-exec

我有一个exe文件,其中包含以下代码:

而(1)

的printf( “你好\ n”);

我正在使用shell_exec

通过php执行此exe

$ output = shell_exec('C:/Users/thekosmix/Desktop/hello.exe 2>& 1');

echo $ output;

现在脚本正在执行很长时间,直到我从任务管理器中删除进程并且它会给出致命的错误:

(致命错误:第7行的C:\ xampp \ htdocs \ shell \ index.php中允许的内存大小为134217728字节(试图分配133693440字节))

我希望脚本(或此函数)在给定的持续时间内运行并打印在持续时间内生成的任何输出而不是任何致命错误。 set_time_limit()也没有解决问题。

3 个答案:

答案 0 :(得分:3)

您无法在PHP中执行此操作 - 仅在每个PHP语句执行后检查set_time_limit()。在linux下你可以使用ulimit,但看起来你正在使用Windows。

您需要修改hello.exe可执行文件以在超时时构建,或者编写一个从PHP调用的包装器,它调用hello.exe并处理超时。在任何可以轻松分叉的语言中,这都是微不足道的。

答案 1 :(得分:1)

总结:如果使用Linux服务器,请执行以下操作:

shell_exec('ulimit -t 120 && ' . $path_to_program);

这会在使用cpu的两分钟后终止,实际使用时间要超过2分钟,具体取决于程序对资源的需求。

答案 2 :(得分:0)

你可以改变脚本

while (shouldKeepRunning())

shouldKeepRunning可以以最原始的形式检查某个文件是否存在以确定它是否应该继续运行。然后,您只需创建或删除文件即可正常关​​闭脚本。在linux上,您可以使用信号处理程序,但不能使用Windows。无论如何,你明白了。

如果外部while循环不够精细,没有大量的代码修改,你可以使用ticks。 http://php.net/manual/en/control-structures.declare.php