当我在一个单独的进程执行命令,例如通过使用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?
处理从Java程序产生的长时间生存的外部进程的正确方法是什么?它根本不产生stdout/stderr?
编辑
基本上我在另一个shell脚本,确保一切重定向到的/ dev/null的包裹shell脚本。如果我的“outter”shell脚本(将所有内容重定向到/ dev/null)仍然会在stdout或stderr上生成任何内容,我很确定我的Un * x不符合要求。然而,我发现它让我大开眼界,认为我应该在应用程序的生命周期中运行线程“毫无用处”。真的让人头晕目眩。
有趣。我将编辑我的问题......基本上我将shell脚本包装在另一个shell脚本中,确保将所有内容重定向到*/dev/null *。我非常确定,如果我的“outter”shell脚本(将所有内容重定向到*/dev/null *)仍然会在* stdout *或* stderr *上生成任何内容,我的Un * x将不符合要求。 – SyntaxT3rr0r 2011-01-12 21:33:53
@ SyntaxT3rr0r - 我明白。我只是那些偏执狂的人之一。 :)我同意多余的线程可能是不必要的。 – rfeak 2011-01-12 21:37:46