Назад | Перейти на главную страницу

PHP / SSH2 Многопоточность

Я в основном закончил использовать SSH2 с PHP. Некоторые уже могут сказать, что при его использовании код PHP фактически ожидает выполнения всех перечисленных команд в SSH, и когда все будет сделано, он затем возвращает результаты. Это нормально для моей работы, но мне нужно, чтобы некоторые команды были многопоточными.

$ cmd = MyCommand; эхо $ 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 секунд и в любом случае не являются одновременными.

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