PHP / SSH2 Многопоточность
Я в основном закончил с использованием SSH2 с PHP. Некоторые могут уже сказать, что при его использовании код PHP фактически ожидает выполнения всех перечисленных команд в SSH, а когда все готово, он возвращает результаты. Где это хорошо для работы, которую я делаю, но мне нужно, чтобы некоторые команды были многопоточными.
$ cmd = MyCommand; 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. Мне действительно не нужна очень аккуратная многопоточность. Спасибо, даже задержка в секунду.
2 ответа
... кроме того факта, что выполнение системных команд имеет мало общего с 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++;
}