【发布时间】:2011-01-12 21:18:34
【问题描述】:
当我在单独的进程中执行命令时,例如使用 Runtime.getRuntime().exec(...) 方法,其 JavaDoc 指出:
Executes the specified command and arguments in a separate process.
知道该进程将一直存在到 Java 程序存在之前,我需要如何处理来自该进程的流? (这是一个细节,但 Java 程序会负责终止该进程,并且该进程本身具有内置安全功能,如果它注意到生成他的 Java 程序不再运行,它会在其中杀死自己。
如果我们认为这个过程根本不产生任何输出(例如,因为所有错误消息和 stdout 都被重定向到 /dev/null 并且所有通信都使用 files/sockets/whatever 完成),我需要做什么输入流?
我是否应该让一个(或两个?)Java 线程无用运行,试图读取 stdout/stderr?
处理从根本不产生 stdout/stderr 的 Java 程序产生的长期存在的外部进程的正确方法是什么?
编辑
基本上,我将 shell 脚本包装在另一个 shell 脚本中,确保将所有内容重定向到 /dev/null。如果我的“外部”shell 脚本(将所有内容重定向到 /dev/null 的脚本)仍然会在 stdout 或 stderr 上生成任何内容,我很确定我的 Un*x 将不符合要求。然而,令人难以置信的是,在应用程序的生命周期中,我应该以某种方式让线程“白费”地运行。真是令人难以置信。
【问题讨论】: