我需要编写一个代码,
Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
lsof -t -i: MYPORT
kill -9 PID
(也通过执行java代码中的命令)杀死他但是
如果我通过Runtime.getRuntime().exec()
执行此命令,我的程序将以退出代码137退出 - 这意味着当我运行Runtime.getRuntime().exec("kill -9 PID")
时,我会杀死我的java程序的进程,而不是我运行的程序代码。
如何才能杀死我从代码运行的进程?
P.S。也许我应该使用ProcessBuilder?
答案 0 :(得分:11)
您可以使用destroy
Process p = Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
p.destroy();
另请注意,在单独的线程中运行其他代码而不是在单独的进程中运行可能是有意义的。
答案 1 :(得分:1)
您可以使用.exec("ps|grep <your process name>");
,然后解析结果以获取PID,最后.exec("kill PID");
因此,您的进程被杀死但Android应用程序仍处于活动状态。
答案 2 :(得分:0)
你可以在unix中使用反射pid(我知道这是一个坏主意:))并调用kill;
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));