【问题标题】:How to test if my script sh is still running by JAVA如何测试我的脚本 sh 是否仍在由 JAVA 运行
【发布时间】:2020-07-10 09:29:35
【问题描述】:

我有一个 java 类,它在一个循环中运行多个 shell 脚本,如下所示:

for (int i = 0; i < list.size(); i++) {
Runtime.getRuntime().exec(file.getAbsolutePath() + "/script.sh");
}

在同一堂课中,我想在 3 分钟后测试脚本 sh 是否仍在运行,如果是,则转到第二个 script.sh 的执行,如果不是,则等到它完成。

有什么帮助吗?

【问题讨论】:

    标签: java bash shell sh


    【解决方案1】:

    记录流程实例后:

     Process p = Runtime.getRuntime().exec(cmd);
    

    您可以调用它来等待它在您希望稍后的任何时间段结束后结束:

     p.waitFor();
    

     p.waitFor(long timeout, TimeUnit unit)
    

    【讨论】:

      【解决方案2】:

      您可以将exec方法返回的Process实例存储在一个变量中,然后调用Process#isAlive查看它是否还在运行。

      例子:

      Process p = Runtime.getRuntime().exec("script.sh");
      Thread.currentThread().wait(100);
      if(p.isAlive()){
           // Do something
      }
      

      【讨论】:

      • 问题是 p.isAlive 总是返回 false,即使我的进程仍在运行。你知道为什么吗?
      • 你怎么知道它还在运行?你确定它是你的java程序创建的实例,而不是别的东西?
      • 我知道为什么它还在运行,实际上为了在 Windows 上运行它,我将代码更改为 Process p = Runtime.getRuntime().exec("cmd.exe /c start "+ "/script.sh");因此,当我执行 p.isAlive 时,它​​会测试 cmd.exe 是否还活着而不是 .sh,您对测试子进程有什么建议吗?
      • 命令 cmd start 启动一个新进程,旧进程并不代表我认为的脚本。
      • 我不太明白..你的意思是start启动了新进程,即.sh进程,旧进程是cmd.exe,所以进程p指的是cmd.exe?如果这就是你的意思,我怎么能测试 .sh 进程,如果还活着。
      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      相关资源
      最近更新 更多