我希望在给定时间后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);
?>
答案 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