Как получить процесс PID, запущенный Symfony?

Как я могу получить PID процесса, запущенного Symfony?
Код ниже

$process = new \Symfony\Component\Process\Process('vlc');
$process->start();
return $process->getPid();

возвращает PID 1488. Но в системе нет процесса (без vlc, без php) с таким же PID.

редактировать

Представленный код запускается в приложении / консоли (Symfony \ Component \ Console \ Command \ Command)

2

Решение

Процесс разветвления

Весьма вероятно, что процессы порождают свой пользовательский интерфейс отдельно и позволяют начальному процессу завершиться нормально, т.е.

----> vlc (1488) ---> EOL
|
+--> vlc-ui (??) ---> Application

Такое поведение можно наблюдать, запустив приложение из командной строки и проверив, возвращается ли приглашение почти немедленно.

Сигнал зависания

Также обратите внимание, что когда выходит родительский процесс (ваш сценарий), дочерний процесс может также выбрать выход, прослушивая сигналы SIGHUP. Если вы этого еще не сделали, вы можете позволить вашему сценарию «жить» дольше, добавив sleep() Заявление пока вы расследуете.

2

Другие решения

Другой подход, который может работать в некоторых ситуациях, заключается в обратном выполнении сценариев, например, для анализа синтаксического анализа ps -A, содержащего требуемый процесс (например, PHP), и извлечения PID из результата. У вас нет контроля над «кто есть кто» в наборе результатов, но вы не можете контролировать, кто на самом деле работает.

0

По вопросам рекламы [email protected]