首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : Runtime.getRuntime().exec()运行的杀死进程

Java : Runtime.getRuntime().exec()运行的杀死进程
EN

Stack Overflow用户
提问于 2013-08-04 21:01:34
回答 3查看 18.4K关注 0票数 6

我需要写一段代码

  1. 使用Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");运行unix进程
  2. 通过从java代码lsof -t -i: MYPORT执行命令来查找进程的PID
  3. 并通过pid kill -9 PID (也是通过执行java代码中的命令)杀死他。
  4. 然后执行其他命令

如果我通过Runtime.getRuntime().exec()执行这个命令,我的程序就会退出代码137 --这意味着当我运行Runtime.getRuntime().exec("kill -9 PID")时,我会杀死我从代码中运行的java程序的进程,而不是程序。

如何只杀死从代码中运行的进程?

也许我该用ProcessBuilder?

EN

回答 3

Stack Overflow用户

发布于 2013-08-04 21:05:26

您可以用destroy杀死从java应用程序中启动的子进程。

代码语言:javascript
复制
Process p = Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
p.destroy();

还请注意,在单独的线程中而不是在单独的进程中运行其他代码可能是有意义的。

票数 12
EN

Stack Overflow用户

发布于 2014-05-14 03:36:36

您可以使用.exec("ps|grep <your process name>");,然后解析结果以获得PID,最后是.exec("kill PID");

因此,您的进程被终止了,但android应用程序仍在运行。

票数 1
EN

Stack Overflow用户

发布于 2017-04-19 08:15:59

您可以在unix中使用反射获得pid (我知道这是个坏主意:)并调用杀死;

代码语言:javascript
复制
Process proc = Runtime.getRuntime().exec(
   new String[] {"java","-classpath",System.getProperty("java.class.path"),... });
Class<?> cProcessImpl = proc.getClass();
Field fPid = cProcessImpl.getDeclaredField("pid");
if (!fPid.isAccessible()) {
    fPid.setAccessible(true);
}
Runtime.getRuntime().exec("kill -9 " + fPid.getInt(proc));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18047531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档