Метод isRunning
Метод isRunning класса Process возвращает булево значение: true, если процесс запущен и ещё не завершился, и false в противном случае. Метод не принимает параметров. Его удобно использовать для проверки состояния асинхронного процесса, запущенного через метод start, перед вызовом wait или чтением вывода.
Синтаксис
$process->isRunning()
Пример
Давайте запустим процесс асинхронно и проверим его состояние сразу после запуска:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '-la']);
$process->start();
$res = $process->isRunning();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Пример
Давайте дождёмся завершения процесса и проверим состояние повторно:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '-la']);
$process->start();
$process->wait();
$res = $process->isRunning();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Пример
Давайте проверим состояние процесса до его запуска:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '-la']);
$res = $process->isRunning();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Пример
Давайте используем isRunning в цикле ожидания завершения процесса:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['sleep', '2']);
$process->start();
while ($process->isRunning()) {
usleep(100000);
}
$res = $process->getOutput();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
""