2013-03-25 70 views
4

我有一个CentOS服务器,它当前正在运行一个java jar应用程序。我需要编写一个php脚本来通过它的输入流与正在运行的程序进行通信。 java程序将其输出输出到日志文件,所以我不需要访问输出流。如何写入已运行的java程序的输入流?

我不想重新启动程序,只需访问正在运行的进程并与之交互即可。

有人能指出我正确的方向吗?

+4

搜索**命名管道**(http://ubuntuforums.org/showthread.php?t=372505) – PeterMmm 2013-03-25 17:25:14

+2

或考虑一个环回套接字连接 - 请参阅Peter Lawrey对[此问题](http:// stackoverflow.com/questions/4112480/named-pipes-between-java-and-cc-programs)。 – 2013-03-25 17:32:18

+0

我去了一个回送套接字连接。 – noahnu 2013-04-01 18:24:19

回答

1

如果便携性对您来说不是一件大事,为什么不创建自己的管道?我对Java应用程序了解不多,但看看“mkfifo”函数/命令。

1

首先,找到应用程序的ProcessID。您可以使用做到这一点:

ps -Af | grep java 

由于您使用的是Java,你可能会觉得与查找PID的jps命令更方便。

我假设运行的应用程序的PID为12345。这足以发出命令:

cat >/proc/12345/fd/0 

而且不管你输入将被放置在该应用程序的标准输入。请注意,fd包含应用程序使用的文件描述符,我假设第0个文件描述符将始终为stdin

使用PHP写入文件(并因此被应用程序用作输入)也是可能的。

+1

我非常肯定,只有stdin恰好是一个pty设备才有效。如果它是一个常规文件,那么你只是覆盖了该文件。如果它是/ dev/null,那么我怀疑什么都不会发生。 – Tim 2013-03-25 17:56:32

+0

'猫'给我“文本文件忙”。 – noahnu 2013-03-25 18:37:34