Документация popen
а также proc_open
упомянуть, что соответственно pclose
а также proc_close
ДОЛЖЕН быть вызван.
Почему это? Почему я не могу запустить процесс, и его завершение не зависит от родителя?
Это было бы полезно, например, в случае фатальной ошибки в родительском процессе.
Это вызывает вопрос что происходит, если родитель выходит без вызова pclose
или же proc_close
. Я ожидаю, что дочерний процесс будет осиротевшим, но то, что происходит с трубами, например.
Редактировать: некоторое тестирование с обоими popen
а также proc_open
кажется, показывает, что PHP убивает дочерние процессы при завершении, будь то путем вызова exit
или по фатальной ошибке.
Редактировать: Краткое резюме контекста:
Для мониторинга веб-приложения * мне нужен «серверный» процесс, который получает короткие сообщения от одного или нескольких «клиентских» процессов. В некоторых ситуациях новый сервер должен быть запущен при запуске программы. Чтобы сделать эту работу независимой от источника вызова (например, HTTP-запроса), я хочу, чтобы клиент запустил этот процесс. Поскольку (а) сервер может быть подключен к нескольким клиентам и (б) он должен реагировать на сбои клиентов, мне нужно, чтобы он завершился независимо от клиента, который его запустил.
* Это очень большая система, которая уже используется, поэтому я не могу изменить ее структуру.
Задача ещё не решена.
Других решений пока нет …