使用 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+C 和 Ctrl+Break 不起作用.
主要目标是 运行 同时进行多个进程,并能够在需要时中断进程。
我错过了什么?我该如何解决这个问题?
任何帮助,将不胜感激。
无法重现此内容(因为缺少主题 JAR),可能会发生以下三种情况之一:
- 进程是 short-lived 并在不久后停止(考虑到您问题中的措辞,我猜情况并非如此),或者
- 进程没有正确启动,或者
- 当 parent 进程到达其主要方法的末尾时,child 进程正在死亡
一些尝试:
- pb.start() 将 return 一个 Process object。一旦你的所有进程都启动了,让你的主要方法等待其中一个(或所有)完成并查看 children 是否还活着。
- Double-check 您在日志中没有异常。使用 printStackTrace 而不是 System.out.println 可以让您更容易发现这一点。
我有一个程序使用 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+C 和 Ctrl+Break 不起作用.
主要目标是 运行 同时进行多个进程,并能够在需要时中断进程。 我错过了什么?我该如何解决这个问题? 任何帮助,将不胜感激。
无法重现此内容(因为缺少主题 JAR),可能会发生以下三种情况之一:
- 进程是 short-lived 并在不久后停止(考虑到您问题中的措辞,我猜情况并非如此),或者
- 进程没有正确启动,或者
- 当 parent 进程到达其主要方法的末尾时,child 进程正在死亡
一些尝试:
- pb.start() 将 return 一个 Process object。一旦你的所有进程都启动了,让你的主要方法等待其中一个(或所有)完成并查看 children 是否还活着。
- Double-check 您在日志中没有异常。使用 printStackTrace 而不是 System.out.println 可以让您更容易发现这一点。