我在MySQL中有很多行。我将在这些行中的每个行上对ip执行ping操作,所以我想分解负载。我制作了一个脚本,为数据库中的每100行运行一个新进程。问题在于,父脚本似乎在开始下一个脚本之前要等待每个脚本完成,这会使整个目的失效。如何确保PHP实例在后台运行?
这是父脚本
for($i = 0; $i < $children_num; $i++)
{
$start = $bn["dots_pr_child"] * $i;
exec("php pingrange.php $i $start $bn[dots_pr_child]");
}
值得一提的是,这些孩子的过程中运行exec("ping")
每行的MySQL一次的重要组成部分的代码。我认为这是问题的一部分。
我会根据要求发布更多信息和代码。
有没有办法强制PHP实例在后台运行,并且前台继续运行?最好父母脚本应该采取0.0001 sek并打印“完成”。目前它运行120秒。
感谢您的任何和所有帮助
编辑:我试过的过程后添加&
。人们会认为这会使exec函数立即返回,但不会。
编辑:尝试exec("php pingrange.php $i $start $bn[dots_pr_child] 2>&1 &");
没有成功
编辑:尝试exec("nohup php pingrange.php $i $start $bn[dots_pr_child] &");
没有成功
这是做的伎俩!你愿意解释这个魔法吗? :D – Hubro 2011-03-30 04:08:28
@Codemonkey:'>/dev/null' = STDOUT到'/ dev/null','2>/dev/null' STDERR到'/ dev/null'。 – 2011-03-30 04:40:40
,只要有输出流附加到它所产生的进程,进程就无法进入后台。所以重定向那些从PHP过程中“分离”出来的。 – edorian 2011-03-30 23:40:09