java 停止另一个java进程_从另一个java进程调用java使其停止

我有一个程序有2个进程

java:processA和processB(2进程java.exe不是2个线程).

我在进程A中使用下面的代码块来调用processB,这个代码包含在下面的RunTask类中

public class RunTask implements Callable {

private String runParams;

public String getRunParams() {

return runParams;

}

public void setRunParams(String runParams) {

this.runParams = runParams;

}

@Override

public Object call() throws Exception {

try {

//System.out.println("run:" + runParams);

Process procB = Runtime.getRuntime().exec("java -jar processB.jar);

DataInputStream ls_in = new DataInputStream(procB.getInputStream());

String ls_str;

while ((ls_str = ls_in.readLine()) != null) {

System.out.println(ls_str);

}

} catch (Exception exp) {

exp.printStackTrace();

}

return null;

}

}

和主类我使用执行者

ExecutorService eservice = Executors.newSingleThreadExecutor();

while (1 == 1) {

String stringParams = getFilesNeedToImportAsString();

if (stringParams.trim().isEmpty()) {

long l1 = System.currentTimeMillis() - l;

System.out.println("all time" + l1 / 1000);

System.exit(100);

}

RunTask runTask = new RunTask();

runTask.setRunParams(SystemInfo.RUN_COMMAND + stringParams);

Future objectFuture = eservice.submit(runTask);

while (!objectFuture.isDone()) {

System.out.println("waiting the task running");

Thread.sleep(500);

}

}

但是当processB上发生异常时,两个进程(processA,processB)似乎都停止了,这就是在processB上运行的代码

public Object call() {

try {

MutationResult result = mutator.execute();

return "ok";

} catch (Exception exp) {

exp.printStackTrace();

System.out.println("error on " + Thread.currentThread().getName() + "failed begin retry " + (++retryCount));

call();

System.out.println(retryCount + " completed");

return "ok";

}

}

如果我独自运行processB(通过命令行)它永远不会发生,或者当这个问题发生时我使用taskmanager杀死proceesA(被调用者),processB继续运行

请任何人给我这个问题的解决方案!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值