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++;
}
Другие вопросы по тегам