【发布时间】:2013-10-14 16:38:03
【问题描述】:
我需要一个例程同时发出 2 个或更多 dns 请求,但只使用第一个/最快的结果。
我如何从孩子那里返回答案,所以我只能得到一个结果?
$pid = pcntl_fork();
if ($pid == -1) die("could not fork");
if ($pid) {
//parent
} else {
$pid2 = pcntl_fork();
if ($pid2 == -1) die("could not fork");
if ($pid2) {
//parent-child
exec("/usr/bin/dig @8.8.8.8 $name A +short +time=1+tries=1",$ips_array,$digreturn);
} else {
exec("/usr/bin/dig @8.8.4.4 $name A +short +time=1 +tries=1",$ips_array,$digreturn);
}
}
print_r ($ips_array);
如果两个请求都返回,这将返回 2 倍的答案
【问题讨论】:
-
当你fork时,每个进程都有自己的所有变量的副本,包括
$ips_array()。您需要使用管道将结果传达回原始父进程,后者可以将它们合并在一起。
标签: php linux fork simultaneous-calls