Yanick Witschi
Contributed by Yanick Witschi in #48485

Consider the following Symfony console command:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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']);

        // ...
    }
}

If you run this command as follows:

1
$ php -d memory_limit=-1 bin/console app:my-command

Which will be the memory limit of the cache:pool:prune command run from inside app:my-command? It won't be -1. The reason is that subprocesses in PHP don't inherit the configuration of their parent processes. Instead, they use the default configuration defined in the corresponding php.ini files.

In Symfony 6.4 we're introducing a new PhpSubprocess class to solve this problem. Whenever you need to run a subprocess with the same PHP configuration as the parent process, use PhpSubprocess instead of Process to run that subprocess:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Symfony\Component\Process\PhpSubprocess;
// ...

class MyCommand extends Command
{
    // ...

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        // this subprocess will inherit all the config of the parent process
        $subProcess = new PhpSubprocess(['bin/console', 'cache:pool:prune']);

        // ...
    }
}
Published in #Living on the edge