【问题标题】:PHP fork, and get result from childPHP fork,并从孩子那里得到结果
【发布时间】: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


【解决方案1】:

我建议看看 socket_create_pair()

在 PHP 手册中,有一个非常简短且简单的 fork()-parent 和 child 之间的进程间通信 (IPC) 示例。

Abd 使用 serialize() 和 unserialize() 你甚至可以传输复杂的数据类型,如数组...

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多