Как запустить фоновый процесс в PHP и прочитать/записать его stdout/stdin?

В качестве расширения вопроса "php выполнить фоновый процесс":

Предположим, я хочу, чтобы процесс работал во время сеанса PHP, например интерактивная оболочка bash. Как я могу установить перенаправление stdout/stdin, чтобы PHP мог читать/писать в процесс?

ОБНОВЛЕНИЕ: Ключ в том, чтобы иметь возможность запускать процесс и поддерживать его работу в фоновом режиме, чтобы последующие запросы могли получить доступ к его потокам stdout/stdin.


person spoulson    schedule 14.07.2010    source источник


Ответы (3)


Я бы использовал PHP Expect. В документации есть несколько очень хороших примеров использования.

person psmears    schedule 14.07.2010
comment
Как только процесс запущен, как вы возвращаете его дескриптор последовательных запросов? - person spoulson; 15.07.2010
comment
@spoulson: А, я вижу - ваш вопрос стал яснее, когда вы его обновили :-). Это намного сложнее, дай подумать... - person psmears; 15.07.2010

Если вы используете Linux, вы можете получить доступ к файловой системе proc в /proc. Хотя дистрибутивы могут несколько отличаться, в Ubuntu Server я могу найти свой stdio в /proc/‹pid›/fd/[012]. 0 — стандартный ввод, 1 — стандартный вывод и 2 — стандартный вывод. Это, вероятно, не сработает, если вы перенаправляете их из или в /dev/null, как это делают некоторые методы выделения длительных фоновых процессов. Если у вас есть доступ к pid фонового процесса (а-ля http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/), вы должны иметь доступ к стандартному вводу / стандартному выводу процесс в линуксе.

person Iiridayn    schedule 28.09.2010

Если вы используете PHP для передачи введенных пользователем команд в оболочку, вы можете использовать несколько вызовов shell_exec

shell_exec вернет полный вывод, который вы затем можете повторить обратно пользователю.

person webbiedave    schedule 14.07.2010