Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的exec函数是否可以超时?_Php - Fatal编程技术网

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

php中的exec函数是否可以超时?,php,Php,我希望php中的exec在给定时间后停止执行。 例如: 20秒后停止处决。 有可能吗 <?php exec("/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'",$admin_uptime); ?> 在unix中,每个进程都绑定父进程。如果父进程死亡,子进程也会死亡。因此,如果您使用以下命令:set_time_limit20;脚本和执行的子进程被终止。exec函数处理执行程序的输出,因此我建议您

我希望php中的exec在给定时间后停止执行。 例如:

20秒后停止处决。 有可能吗

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

在unix中,每个进程都绑定父进程。如果父进程死亡,子进程也会死亡。因此,如果您使用以下命令:set_time_limit20;脚本和执行的子进程被终止。

exec函数处理执行程序的输出,因此我建议您将输出重定向到/dev/null虚拟可写文件,该文件会自动释放您写入的所有数据

尝试运行:

exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");
注意:2>&1将错误输出重定向到标准输出,而>/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 x y z > /dev/null

检查这个,我的脚本有不止一个exec函数。我不会在20秒后杀死所有exec。我想给每个执行者20秒来完成它的执行。20秒后,一个执行官停止,第二个执行官开始执行,这可能吗?分而治之:这是我从你的帐户中注意到的第二项未分配的工作。这个答案没有归属。抄袭另一篇文章是可以的,但将其归因于原作者是一种良好的做法和礼貌。阅读更多。
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