这应该很简单,但是在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;
  }
}

(省略了一些样板)。

10-06 01:43