Multi-Threading

PHP / SSH2 多執行緒

  • February 16, 2015

我基本上已經用 SSH2 和 PHP 完成了。有些人可能已經認為,在使用它時,PHP 程式碼實際上會等待所有列出的命令在 SSH 中執行,當一切都完成後,它會返回結果。這對我正在做的工作來說很好,但我需要一些命令是多執行緒的。

$ cmd= MyCommand; echo $ ssh->exec($cmd);

所以我只想讓它並行執行 2 次。我用Google搜尋了一些東西,但沒有相處。對於一個基本的事情,我遇到了某人發布的這種方式,但它對我來說並不奏效。

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 秒並且無論如何都不是同時的。

$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++;
}

引用自:https://serverfault.com/questions/406330