使用ProcessBuilder进行多次处理

时间:2016-09-10 09:44:08

标签: java processbuilder

我有一个程序使用ProcessBuilder来运行不同的程序。 我的代码如下所示:

public class runMultiClient {
public static void main(String[] args){
    if (args[0].matches("-f")){
        String dir = System.getProperty("user.dir");
        String path = dir + "\\" + args[1];
        FileReader fr;
        try {
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);

            String line = "";
            Process PR = null;
            while ((line = bf.readLine()) != null){
                String[] tk = line.split(" ");
                String[] cmd = {"javaw", "-jar", "ntripClient.jar", "-a", tk[0], "-p", tk[1],
                        "-u", tk[2], "-pw", tk[3], "-m", tk[4], "-t", tk[5], "-s", tk[6]};
                ProcessBuilder pb = new ProcessBuilder(cmd);
                PR = pb.start();
            }
            PR.waitFor();
        } 
        catch (FileNotFoundException ex) {ex.printStackTrace();} 
        catch (IOException ex) {ex.printStackTrace();} 
        catch (InterruptedException ex) {ex.printStackTrace();}
    }
}}

我从cmd运行这个程序。它除了包含每行数据的启动文件的名称。 基于此文件,它假设创建了几个进程。

然而,它并不顺利。现在我在启动文件中有2行,这意味着应该启动两个进程。 它实际上做的是启动第一个进程,然后停止它并启动第二个进程。另一个问题是,我不知道如何杀死进程,它似乎在后台运行,并没有出现在任务管理器中。 Crtl + C Ctrl + Break 不起作用。

主要目标是在同一时间运行多个流程,并在需要时能够中断流程。 我错过了什么?我该如何解决这个问题? 任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果没有能够重现这一点(由于缺乏主题JAR),可能会发生以下三种情况之一:

  • 这些过程是短暂的,并且会在一段时间后降下来(我猜你的问题并非如此,或者
  • 这些流程无法正常启动,或
  • 当父进程到达其主方法的末尾时,子进程正在死亡

有些事情要尝试:

  • pb.start()将返回Process个对象。一旦您的所有流程都已启动,请让您的主要方法等待其中一个(或全部)完成并查看孩子是否还活着。
  • 仔细检查日志中没有例外。使用printStackTrace而不是System.out.println可以让您更容易发现。