2013-03-25 76 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