我基本上已经完成了将 SSH2 与 PHP 结合使用的工作。有些人可能已经知道,在使用它时,PHP 代码实际上会等待所有列出的命令在 SSH 中执行,当一切都完成后,它会返回结果。这对我正在做的工作来说很好,但我需要一些命令是多线程的。
$cmd=我的命令;echo $ssh->exec($cmd);
所以我只想让它并行运行 2 次。我用谷歌搜索了一些东西,但没有得到它。对于基本的事情,我遇到了某人发布的这种方式,但对我来说没有用。
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 失败。我真的不需要非常简洁的多线程。哪怕是一秒钟的延迟都会有好处,谢谢。
...除了执行系统命令与 PHP 几乎没有关系之外,是的,在没有任何进一步准备的情况下执行系统命令将导致调用者等待命令完成。
传统上,人们使用 fork() 来做这类事情。
我发现这是另一个用户在 ServerFault 上发布的,但这基本上不充当多线程。我的 $cmd3 exec 命令基本上在 10 秒后自动关闭,这些命令运行了 30 秒并且不是同时运行的。