我有一个多线程,主要思想是在控制台中运行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 脚本来处理该目录中的结果。