PHP PECL 线程结果顺序


PHP PECL Threads results order

我有一个多线程,主要思想是在控制台中运行nmap命令并以有序的方式交付结果,

例:

shell_exec后的结果

命令 4命令 1命令 2命令 3

如何有序地

获得结果?

命令 1命令 2命令 3命令 4

public function __construct($arg) {
    $this->arg = $arg;
}
public function run() {     
        $salida = shell_exec($comando);         
}

'

如果您在单独的线程中启动它们,则作业不太可能以与启动顺序相同的顺序完成。您需要跟踪它们并等到所有操作完成。您没有包含太多代码,但下面是一个通用示例:

// create jobs
$jobs[0] = new nmapJob(args0);
$jobs[1] = new nmapJob(args1);
...
// start jobs
foreach ($jobs as $job)
{
  $job.start();
}
// wait for jobs to finish
foreach ($jobs as $job)
{
  $job.join();
}
// display results
foreach ($jobs as $job)
{
  echo($job.salida);
}

但。。。我建议使用不同的技术。让 shell 命令像这样晃来晃去并不是最好的做法,特别是如果它可能需要一段时间才能运行(就像 nmap 作业经常做的那样)。它更复杂,但请考虑异步运行扫描。将它们生成为单独的进程,并将结果转储到目录中。扫描完成后,可以使用不同的 PHP 脚本来处理该目录中的结果。