我基本上完成使用SSH2与PHP。 有些人可能已经在使用它的时候,实际上PHP代码会等待所有列出的命令在SSH中被执行,当一切完成时,它会返回结果。 哪里对我正在做的工作很好,但我需要一些命令是multithreading的。
$ cmd = MyCommand; echo $ ssh-> exec($ cmd);
所以我只是希望这个并行运行2次。 我search了一些东西,但没有相处。 一个基本的东西,我遇到这样的人张贴,但它没有为我工作。
for ($i = 0; $i < 2; $i += 1) { exec("php test_1.php $i > test.txt &"); //this will execute test_1.php and will leave this process executing in the background and will go to next iteration of the loop immediately without waiting the completion of the script in the test_1.php , $i is passed as argument . }
我试图把它这样的exec(“echo $ ssh-> exec($ cmd)$ i> test.txt&”); 在循环中但是它从来没有进入循环或echo $ ssh-> exec失败。 我并不需要非常简洁的multithreading。 即使只有一秒钟的延迟也会有好处,谢谢。
…除了执行系统命令与PHP没什么关系外,是的,执行一个系统命令没有任何进一步的准备,将导致调用者等待命令完成。
传统上,使用fork()来处理这种事情。
我发现这由另一个用户在ServerFault发布,但这基本上不作为multithreading。 我的$ cmd3 exec命令基本上在10秒后自动closures,这些命令运行30秒,而且不是同时发生的。
$i=0; while($i < 3) { $pid = pcntl_fork(); if($pid == -1) { echo "Couldn't fork process"; exit(1); } else { if($pid) { pcntl_wait($status); } else { echo $ssh->exec($cmd3); } } $i++; }