Unix操作系统中java多线程的Hands ProcessBuilder

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

使用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 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脚本的各种组合尝试了您的代码,每次运行都会产生输出