【发布时间】:2015-03-10 18:38:01
【问题描述】:
(我使用的是 Windows 7)我知道如何启动一个进程、传递一些参数并读取该进程的输出。
import java.io.*;
class Test {
public static void main(String args[]) throws IOException {
ProcessBuilder pb
= new ProcessBuilder("java", "ProgramFoo", "ArgBar");
Process process = pb.start();
final InputStream is = process.getInputStream();
BufferedReader reader
= new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
但我想做的是读取运行进程的输出。可能是它的 PID 或名称。
有什么想法吗?
【问题讨论】:
-
我怀疑这是可能的。至少以独立于平台的方式。
-
@aioobe 我忘了提到告诉操作系统我正在使用的原因。我不介意它是否仅适用于 Windows 解决方案。
-
@M1990 你能解释一下你想要做的更多吗?如果一个进程已经在运行,则要么没有分配标准输出(例如 chrome.exe),要么它已经链接到命令行窗口并且
cmd正在读取流。如果您之前从同一个 Java 进程启动了新进程,只需按住Process对象,将其传递,稍后再读取流。 -
@TWiStErRob 我有几个硬编码的 - 没有可用的源代码 - 遗留程序。它们每分钟输出几行文本(到控制台)(它们可以持续运行数小时)。我需要执行这些程序,并将它们的输出发送到服务器。