【问题标题】:How do I write to the input stream of an already running java program?如何写入已经运行的 java 程序的输入流?
【发布时间】:2013-04-23 17:04:19
【问题描述】:

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

我不想重启程序,只是访问正在运行的进程并与之交互。

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

【问题讨论】:

标签: java php linux


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    首先,找到应用程序的 ProcessID。你可以这样做:

    ps -Af | grep java
    

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

    我假设正在运行的应用程序的 PID 是 12345。发出命令就足够了:

    cat >/proc/12345/fd/0
    

    您输入的任何内容都将被放入该应用程序的标准输入中。请注意,fd 包含应用程序使用的文件描述符,我想第 0 个文件描述符将始终是 stdin

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

    【讨论】:

    • 我很确定只有在 stdin 恰好是 pty 设备时才有效。如果它是一个常规文件,那么您只需覆盖该文件。如果是 /dev/null,那么我怀疑什么都不会发生。
    • cat 给我“文本文件忙”。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2014-06-29
    相关资源
    最近更新 更多