这应该相当简单,但我在 JavaDocs 中看不到任何有用的信息.
我需要的是从我的 Java 代码运行一些外部进程,然后能够监控该进程是否已关闭。换句话说,我希望能够可靠地确定我的外部进程是否未被用户终止。
如果不存在跨平台解决方案,我会接受在 Linux 下工作的任何东西。
我当前的代码片段:
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("some proces name");
try {
Process p = pb.start();
// p.isRunning(); <- now, that would be helpful :-)
} catch (IOException e) {
e.printStackTrace();
}
}
最佳答案
启动一个调用 Process.waitFor()
的新线程,并在该调用返回时设置一个标志。然后,您可以随时检查该标志以查看该过程是否已完成。
public class ProcMon implements Runnable {
private final Process _proc;
private volatile boolean _complete;
public boolean isComplete() { return _complete; }
public void run() {
_proc.waitFor();
_complete = true;
}
public static ProcMon create(Process proc) {
ProcMon procMon = new ProcMon(proc);
Thread t = new Thread(procMon);
t.start();
return procMon;
}
}
(省略了一些样板文件)。
关于java - 如何监控 ProcessBuilder 运行的外部进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510409/