Опубликовано:
Новое в Symfony 6.4: Обработчик подпроцессов
Источник: «New in Symfony 6.4: Subprocess Handler»
В Symfony 6.4 реализована новая возможность запуска подпроцессов с той же конфигурацией, что и их родительские PHP-процессы.
Рассмотрим следующую консольную команду Symfony:
use Symfony\Component\Process\Process;
// ...
class MyCommand extends Command
{
// ...
protected function execute(InputInterface $input, OutputInterface $output): int
{
$subProcess = new Process(['bin/console', 'cache:pool:prune']);
// ...
}
}
Если выполнить эту команду следующим образом:
php -d memory_limit=-1 bin/console app:my-command
Каким будет лимит памяти команды cache:pool:prune
, запущенной внутри app:my-command
? Он не будет равен -1
. Причина в том, что подпроцессы в PHP не наследуют конфигурацию своих родительских процессов. Вместо этого они используют конфигурацию по умолчанию, заданную в соответствующих php.ini
файлах.
В Symfony 6.4 для решения этой проблемы мы вводим новый класс PhpSubprocess
. Если вам необходимо запустить подпроцесс с той же конфигурацией PHP, что и родительский процесс, используйте PhpSubprocess
вместо Process
для запуска этого подпроцесса:
use Symfony\Component\Process\PhpSubprocess;
// ...
class MyCommand extends Command
{
// ...
protected function execute(InputInterface $input, OutputInterface $output): int
{
// этот подпроцесс унаследует всю конфигурацию родительского процесса
$subProcess = new PhpSubprocess(['bin/console', 'cache:pool:prune']);
// ...
}
}