Допустим, у меня есть следующая команда Symfony 4:
class Command1 extends Command {
protected static $defaultName = 'app:command1';
protected function execute(InputInterface $input, OutputInterface $output){
$process = new Process('bin/console list', getcwd());
$process->start(); // or even $process->run() does not matter if its async or not
// ... where we handle if its finished, etc...
}
}
Если я просто позвоню bin/console app:command1
, она вернет ожидаемый список команд. В основном работает, как я и ожидал.
Но если у меня есть тест phpunit, использующий Symfony\Component\Console\Application::run()
для запуска этой команды, я получаю "бесконечное l oop" (ну, на самом деле нет, это раз после 60 se c) в Symfony\Component\Process::wait()
в
do {
$this->checkTimeout();
$running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
$this->readPipes($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
} while ($running);
, где $this->processPipes->areOpen()
всегда будет открыт.
Мне кажется, если я использую любой Symfony консольная команда в процессе через phpunit, всегда будет открыто два канала, например:
1 = {resource} resource id='x' type='stream'
2 = {resource} resource id='z' type='stream'
, но я не знаю, что это на самом деле. Я также видел в htop, что proc_open
start () фактически запускает новый процесс, но он просто зависает (абсолютно ничего не делает, даже не может его отладить) до истечения времени ожидания. Ничего в журналах ошибок (кроме таймаута).