Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试脚本sh是否仍由JAVA运行_Java_Bash_Shell_Sh - Fatal编程技术网

如何测试脚本sh是否仍由JAVA运行

如何测试脚本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方法返回的流程实例存储在变量中,然后

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

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)