Метод wait класса Process
Метод wait класса Process запускает процесс
и блокирует выполнение скрипта до его завершения.
Если процесс уже запущен через start, метод
просто ожидает его завершения. Первым параметром
передаётся callback-функция, которая вызывается
для обработки вывода в реальном времени. Вторым
параметром передаётся таймаут ожидания в секундах.
Метод возвращает код выхода процесса.
Синтаксис
public function wait(callable $callback = null, int $timeout = null): int
Пример
Давайте запустим простую команду и дождёмся её завершения:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '-la']);
$code = $process->wait();
return new Response('Exit code: ' . $code);
}
}
?>
Результат выполнения кода:
Exit code: 0
Пример
Давайте передадим callback-функцию для обработки вывода процесса в реальном времени:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['echo', 'hello']);
$output = '';
$code = $process->wait(function ($type, $buffer) use (&$output) {
$output .= $buffer;
});
return new Response('Output: ' . $output);
}
}
?>
Результат выполнения кода:
Output: hello
Пример
Давайте запустим процесс через start,
а затем дождёмся его завершения через wait:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['sleep', '1']);
$process->start();
$code = $process->wait();
return new Response('Exit code: ' . $code);
}
}
?>
Результат выполнения кода:
Exit code: 0