我需要写一段代码
Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");运行unix进程lsof -t -i: MYPORT执行命令来查找进程的PIDkill -9 PID (也是通过执行java代码中的命令)杀死他。但
如果我通过Runtime.getRuntime().exec()执行这个命令,我的程序就会退出代码137 --这意味着当我运行Runtime.getRuntime().exec("kill -9 PID")时,我会杀死我从代码中运行的java程序的进程,而不是程序。
如何只杀死从代码中运行的进程?
也许我该用ProcessBuilder?
发布于 2013-08-04 21:05:26
您可以用destroy杀死从java应用程序中启动的子进程。
Process p = Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
p.destroy();还请注意,在单独的线程中而不是在单独的进程中运行其他代码可能是有意义的。
发布于 2014-05-14 03:36:36
您可以使用.exec("ps|grep <your process name>");,然后解析结果以获得PID,最后是.exec("kill PID");
因此,您的进程被终止了,但android应用程序仍在运行。
发布于 2017-04-19 08:15:59
您可以在unix中使用反射获得pid (我知道这是个坏主意:)并调用杀死;
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));https://stackoverflow.com/questions/18047531
复制相似问题