Метод setTimeout
Метод setTimeout класса Process задаёт максимальное время выполнения внешнего процесса. Первым параметром передаётся количество секунд, отведённое на работу процесса. Если процесс не успевает завершиться за это время, Symfony выбрасывает исключение ProcessTimedOutException. Вторым необязательным параметром можно указать общее время ожидания для всех итераций.
Синтаксис
public function setTimeout(int|float|null $timeout): static
Пример
Давайте запустим команду 'sleep 3' с таймаутом в 5 секунд. Процесс успешно завершится, так как время выполнения меньше лимита:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['sleep', '3']);
$process->setTimeout(5);
$process->run();
return new Response($process->getOutput());
}
}
?>
Результат выполнения кода:
""
Пример
А теперь установим таймаут в 1 секунду для той же команды. Процесс будет остановлен, и мы получим исключение:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessExceptionProcessTimedOutException;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['sleep', '3']);
$process->setTimeout(1);
try {
$process->run();
$res = $process->getOutput();
} catch (ProcessTimedOutException $e) {
$res = 'Process timed out: ' . $e->getMessage();
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"Process timed out: The process "sleep 3" exceeded the timeout of 1 seconds."