java - 如何监控 ProcessBuilder 运行的外部进程?

标签 java multithreading process

这应该相当简单,但我在 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/

相关文章:

java - 如何使用 Tomcat 8.0 从 WSDL 生成 Java 客户端? WSDL 文件有多个 xsd 导入

swift - 如何在 Swift 中设置实时线程?

c# - 控制台应用程序提示输入

java - 尝试编码数据时出现 BufferOverflowException

java - Java 版本之间是否存在向后不兼容的具体示例?

Java 在同一个 JFrame 中绘制多个正方形

python - 从另一个线程调用一个扭曲的协议(protocol)方法

c - 如何正确使用 fork() 和 exec()

Groovy 执行进程挂起

java - 如何在xml中进行这样的布局?安卓