2013-03-25 4 views
4

У меня есть сервер CentOS, в котором в настоящее время выполняется приложение java jar. Мне нужно написать php-скрипт для связи с этой запущенной программой через свой входной поток. Программа java выводит свой вывод в файл журнала, поэтому мне не нужен доступ к выходному потоку.Как написать входной поток уже запущенной java-программы?

Я не хочу перезапускать программу, просто получить доступ к запущенному процессу и взаимодействовать с ним.

Может кто-нибудь указать мне в правильном направлении?

+4

Поиск ** названных труб ** (http://ubuntuforums.org/showthread.php?t=372505) – PeterMmm

+2

Или рассмотрите соединение с петлевой штепселем - см. Ответ Питера Лори на [этот вопрос] (http: // stackoverflow.com/questions/4112480/named-pipes-between-java-and-cc-programs). –

+0

Я пошел со штепсельной розеткой. – noahnu

ответ

1

Если переносимость для вас не важна, почему бы не создать свою собственную трубу? Я мало знаю о приложении java, но посмотрю на функцию/mkfifo.

1

Сначала найдите ProcessID приложения. Вы можете сделать это с помощью:

ps -Af | grep java 

Поскольку вы используете Java, вы можете чувствовать себя более удобно с jps команды для нахождения PID.

Я предположу PID запущенного приложения 12345. Достаточно выполнить команду:

cat >/proc/12345/fd/0 

И все, что вы печатаете будет введен в стандартный ввод этого приложения. Обратите внимание: fd содержит файловые дескрипторы, используемые приложением, и я полагаю, что 0-й файловый дескриптор всегда будет stdin.

Использование PHP для записи в файл (и, следовательно, потребление его приложением как входное) также возможно.

+1

Я уверен, что работает только если stdin - это устройство pty. Если это обычный файл, вы просто перезаписываете этот файл. Если это/dev/null, то я подозреваю, что ничего не произойдет. – Tim

+0

'cat' дает мне« текстовый файл занят ». – noahnu

Смежные вопросы