Unix操作系统中java多线程的Hands ProcessBuilder
使用unix操作系统,我尝试在java多线程中使用ProcessBuilder运行.sh文件(.sh文件很常见,但每个线程的参数不同)。代码如下Unix操作系统中java多线程的Hands ProcessBuilder,java,multithreading,unix,Java,Multithreading,Unix,使用unix操作系统,我尝试在java多线程中使用ProcessBuilder运行.sh文件(.sh文件很常见,但每个线程的参数不同)。代码如下 public class CLMScriptExe2 implements Runnable { final String scriptFileName = "/apps/orangd1/temp/CLM/CLM_PCF_Jenkins.sh"; private String AppName; public CLMScript
public class CLMScriptExe2 implements Runnable {
final String scriptFileName = "/apps/orangd1/temp/CLM/CLM_PCF_Jenkins.sh";
private String AppName;
public CLMScriptExe2(String appName) {
AppName = appName;
}
@Override
public void run() {
try {
ProcessBuilder processBuilder = new ProcessBuilder(scriptFileName, AppName);
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
//String line;
System.out.println(line);
}
try {
process.waitFor();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
System.out.println("ending executeScript--Testing");
}
public static void main(String[] args) {
CLMScriptExe2 c1 = new CLMScriptExe2("appOne");
Thread t1 = new Thread(c1);
t1.start();
CLMScriptExe2 c2 = new CLMScriptExe2("appTwo");
Thread t2 = new Thread(c2);
t2.start();
CLMScriptExe2 c3 = new CLMScriptExe2("appThree");
Thread t3 = new Thread(c3);
t2.start();
}
}
Java程序在processBuilder.start()之后终止
编辑:
在此之后,processBuilder.start(),没有日志,没有错误,没有异常,什么都没有,它只是针对所有线程终止
有什么解决办法吗?有点晚了,但这可能会帮助其他人。 您正在启动3个线程,但没有关闭丢失的任何ie:
t1.join();
等
我怀疑您收到ConcurrentModificationException错误。有点晚,但这可能会帮助其他人。 您正在启动3个线程,但没有关闭丢失的任何ie:
t1.join();
等
我怀疑您遇到了ConcurrentModificationException错误。什么叫“终止”?JVM死了?没有错误?没有日志?没有其他线程继续运行吗?它不会打印“ProcessBuilder已启动”行吗?您确定它正在终止而不是停止吗?在此processBuilder.start()之后,没有日志,没有错误,没有异常,什么都没有,它只是针对所有线程终止。在这种情况下,请投入一些时间创建一个,并将其发布到您的问题中,以便我们都可以尝试在我们的计算机上复制它。检查您的sh脚本。当您从命令行运行它时,它是否成功启动和完成?您是否绝对确定没有日志或异常?当您尝试启动
t2
两次时,您当前的代码将抛出IllegalThreadStateException
。我已经用存在/不存在/不可执行的shell脚本的各种组合尝试了您的代码,每次运行都会产生输出“终止”是什么意思?JVM死了?没有错误?没有日志?没有其他线程继续运行吗?它不会打印“ProcessBuilder已启动”行吗?您确定它正在终止而不是停止吗?在此processBuilder.start()之后,没有日志,没有错误,没有异常,什么都没有,它只是针对所有线程终止。在这种情况下,请投入一些时间创建一个,并将其发布到您的问题中,以便我们都可以尝试在我们的计算机上复制它。检查您的sh脚本。当您从命令行运行它时,它是否成功启动和完成?您是否绝对确定没有日志或异常?当您尝试启动t2
两次时,您当前的代码将抛出IllegalThreadStateException
。我已经用存在/不存在/不可执行的shell脚本的各种组合尝试了您的代码,每次运行都会产生输出“终止”是什么意思?JVM死了?没有错误?没有日志?没有其他线程继续运行吗?它不会打印“ProcessBuilder已启动”行吗?您确定它正在终止而不是停止吗?在此processBuilder.start()之后,没有日志,没有错误,没有异常,什么都没有,它只是针对所有线程终止。在这种情况下,请投入一些时间创建一个,并将其发布到您的问题中,以便我们都可以尝试在我们的计算机上复制它。检查您的sh脚本。当您从命令行运行它时,它是否成功启动和完成?您是否绝对确定没有日志或异常?当您尝试启动t2
两次时,您当前的代码将抛出IllegalThreadStateException
。我已经用存在/不存在/不可执行的shell脚本的各种组合尝试了您的代码,每次运行都会产生输出