【问题标题】:Get OutputStream from already running process从已经运行的进程中获取 OutputStream
【发布时间】:2015-05-20 01:50:40
【问题描述】:

我想写入正在运行的进程(不是 Java)的标准输入。如何直接获取Process 对象或OutputStreamRuntime.getRuntime() 只帮助我生成新事物,而不是找到现有进程。

【问题讨论】:

  • 你的标题说 Get OutputStream 但你的描述说如何写入标准输入。那么它是哪一个?
  • 我不认为你想做的事情是可能的。
  • 我认为您将需要使用共享内存或管道在进程之间进行通信。不过可能是错的,也许其他人会纠正我。
  • 不完全是。当您自己创建一个进程时,Java 会创建一个输出流并将其输出连接到该进程的标准输入。 Java 自己的标准输入是System.in,这绝对不是OutputStream
  • @RealSkeptic 我认为 OP 意味着,从 Java 的角度来看,您正在写入对应于该进程的标准输入的 Process OutputStream

标签: linux


【解决方案1】:

这在 Linux 上看起来是可行的,不知道其他地方。搜索"get stdin of running process" 发现了一些看起来很有希望的讨论:

本质上,您可以通过/proc/$pid/fd/0 写入进程的第 0 个文件描述符。从那里,您只需打开一个OutputStream 到该路径。

我刚刚测试了这个(不是 Java 部分,这可能很简单),它就像广告宣传的那样工作:

Shell-1 $ cat

这个阻塞,等待标准输入

Shell-2 $ ps aux | grep 'cat$' | awk '{ print $2 }'
1234
Shell-2 $ echo "Hello World" > /proc/1234/fd/0

现在回到 Shell-1:

Shell-1 $ cat
Hello World

请注意,这不会关闭进程的标准输入。您可以继续写入文件描述符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2011-03-26
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多