如何测试脚本sh是否仍由JAVA运行
我有一个java类,它在循环中运行许多shell脚本,如下所示:如何测试脚本sh是否仍由JAVA运行,java,bash,shell,sh,Java,Bash,Shell,Sh,我有一个java类,它在循环中运行许多shell脚本,如下所示: for (int i = 0; i < list.size(); i++) { Runtime.getRuntime().exec(file.getAbsolutePath() + "/script.sh"); } 在同一个类中,3分钟后,我想测试脚本sh是否仍在运行,如果是,则转到第二个script.sh的执行,如果不是,则等待它完成 有什么帮助吗?您可以将exec方法返回的流程实例存储在变量中,然后
for (int i = 0; i < list.size(); i++) {
Runtime.getRuntime().exec(file.getAbsolutePath() + "/script.sh");
}
在同一个类中,3分钟后,我想测试脚本sh是否仍在运行,如果是,则转到第二个script.sh的执行,如果不是,则等待它完成
有什么帮助吗?您可以将exec方法返回的流程实例存储在变量中,然后调用ProcessisAlive查看它是否仍在运行 例如: 进程p=Runtime.getRuntime.execscript.sh; Thread.currentThread.wait100; ifp.isAlive{ //做点什么 }
记录流程实例后:
Process p = Runtime.getRuntime().exec(cmd);
您可以调用此函数,等待它在以后的任意时间段结束:
p.waitFor();
或
问题是p.isAlive总是返回false,即使我的进程仍在运行。。你知道为什么吗?你怎么知道它还在运行?你确定它是由java程序创建的实例,而不是其他程序创建的吗?我知道它为什么还在运行,实际上要在windows上运行它,我已将代码更改为Process p=Runtime.getRuntime.execcmd.exe/c start+/script.sh;因此,当我执行p.isAlive时,它会测试cmd.exe是否处于活动状态。sh,您有什么建议来测试子流程吗?命令cmd start启动一个新流程,而旧流程并不代表我认为的脚本。我不明白。。您的意思是启动了新进程,即.sh进程,旧进程是cmd.exe,因此进程p引用cmd.exe?如果这就是你的意思,那么如果.sh进程还活着,我怎么能测试它呢。
p.waitFor(long timeout, TimeUnit unit)