使用 ProcessBuilder 的多个进程

multiple processess with 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 行,这意味着应该已经启动了两个进程。 它实际上做的是启动第一个进程,然后停止它并启动第二个进程。另一个问题是我不知道如何终止进程,它似乎在后台 运行ning 并且没有出现在任务管理器中。 Crtl+CCtrl+Break 不起作用.

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

无法重现此内容(因为缺少主题 JAR),可能会发生以下三种情况之一:

  • 进程是 short-lived 并在不久后停止(考虑到您问题中的措辞,我猜情况并非如此),或者
  • 进程没有正确启动,或者
  • 当 parent 进程到达其主要方法的末尾时,child 进程正在死亡

一些尝试:

  • pb.start() 将 return 一个 Process object。一旦你的所有进程都启动了,让你的主要方法等待其中一个(或所有)完成并查看 children 是否还活着。
  • Double-check 您在日志中没有异常。使用 printStackTrace 而不是 System.out.println 可以让您更容易发现这一点。