Ste*_*n C 15
不使用纯Java.
你最简单的选择是使用Runtime.exec()运行kill -9 <pid>的外部进程的命令.
不幸的是,掌握PID并不是那么简单.您将需要使用反射黑魔术来访问该private int pid字段,或者使用该ps命令的输出混乱.
更新 - 实际上,还有另一种方式.创建一个运行真实外部应用程序的小实用程序(C程序,shell脚本等).对该实用程序进行编码,使其记住子进程的PID,并为SIGTERM设置SIGKILL子进程的信号处理程序.
Mar*_*aux 11
斯蒂芬他的回答是对的.我写了他说的话:
public static int getUnixPID(Process process) throws Exception
{
System.out.println(process.getClass().getName());
if (process.getClass().getName().equals("java.lang.UNIXProcess"))
{
Class cl = process.getClass();
Field field = cl.getDeclaredField("pid");
field.setAccessible(true);
Object pidObject = field.get(process);
return (Integer) pidObject;
} else
{
throw new IllegalArgumentException("Needs to be a UNIXProcess");
}
}
public static int killUnixProcess(Process process) throws Exception
{
int pid = getUnixPID(process);
return Runtime.getRuntime().exec("kill " + pid).waitFor();
}
Run Code Online (Sandbox Code Playgroud)
你也可以这样得到pid:
public static int getPID() {
String tmp = java.lang.management.ManagementFactory.getRuntimeMXBean().getName();
tmp = tmp.split("@")[0];
return Integer.valueOf(tmp);
}
Run Code Online (Sandbox Code Playgroud)