Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to monitor external process ran by ProcessBuilder?

This should be rather simple, but I don't see anything helpful in JavaDocs.

What I need is to run some external process from my Java code and then be able to monitor if this process has been shutdown or not. In other words, I want to be able to reliably determine whether or not my external process was not ended by user.

If no cross platform solution exists, I will accept anything working under Linux.

My current snippet of code:

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();
    }
}
like image 545
ŁukaszBachman Avatar asked Jul 16 '12 18:07

ŁukaszBachman


1 Answers

Start a new Thread which calls Process.waitFor() and sets a flag when that call returns. then, you can check that flag whenever you want to see if the process has completed.

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;
  }
}

(some boilerplate omitted).

like image 66
jtahlborn Avatar answered Oct 05 '22 21:10

jtahlborn