private static void killProcessTree(Process process) { try { Field f = process.getClass().getDeclaredField("handle"); f.setAccessible(true); long handl = f.getLong(process); Kernel32 kernel = Kernel32.INSTANCE; WinNT.HANDLE handle = new WinNT.HANDLE(); handle.setPointer(Pointer.createConstant(handl)); int ret = kernel.GetProcessId(handle); Long PID = Long.valueOf(ret); String cmd = getKillProcessTreeCmd(PID); System.out.println("close" + cmd); Runtime rt = Runtime.getRuntime(); Process killPrcess = rt.exec(cmd); killPrcess.waitFor(); killPrcess.destroy(); } catch (Exception e) { e.printStackTrace(); } } private static String getKillProcessTreeCmd(Long Pid) { String result = ""; if (Pid != null) result = "cmd.exe /c taskkill /PID " + Pid + " /F /T "; return result; }