php中的exec函数是否可以超时?

时间:2014-02-19 07:20:53

标签: php

我希望在给定时间后php停止执行exec() 例如:

exec("/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'",$admin_uptime)

20秒后停止执行 有可能.. ??

<?php
exec("/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'",$admin_uptime);
?>

2 个答案:

答案 0 :(得分:0)

在unix中,每个进程绑定父进程。如果父母死亡,孩子的过程也会死亡因此,如果您使用此命令:set_time_limit(20);您的脚本和已执行的子进程被终止。

答案 1 :(得分:0)

exec()函数处理执行程序的输出,因此我建议您将输出重定向到/ dev / null(一个虚拟可写文件,它会自动丢失您写入的每个数据)。< / p>

尝试运行:

exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");

注意:2&gt;&amp; 1将错误输出重定向到标准输出,&gt; / dev / null将标准输出重定向到该虚拟文件。

如果仍有困难,可以创建一个只执行其他脚本的脚本。 exec()在执行任务时遵循进程,但在任务完成时发布。如果执行的脚本只执行另一个脚本,则任务非常快,并且exec以相同的方式释放。

让我们看一个实现。创建一个包含以下内容的exec.php:

<?php

  if (count($argv) == 1)
  {
    die('You must give a script to exec...');
  }
  array_shift($argv);
  $cmd = '/usr/local/bin/php -q';
  foreach ($argv as $arg)
  {
     $cmd .= " " . escapeshellarg($arg);
  }
  exec("{$cmd} > /dev/null 2>&1 &");

?>

现在,运行以下命令:

exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php > /dev/null 2>&1 &");

如果你有参数,你也可以给他们:

exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null