diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java index 88902b9a..711bab09 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java @@ -138,14 +138,16 @@ public class Subserver { writer.println(command); } + private ProcessHandle serverProcess() { + if (checkpoint) { + return process.children().findAny().orElseGet(process::toHandle); + } + return process.toHandle(); + } + public void sleep() { try { - long pid = process.pid(); - if (checkpoint) { - pid = process.children().findAny().map(ProcessHandle::pid).orElse(pid); - } - - Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(pid)}); + Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(serverProcess().pid())}); } catch (IOException e) { logger.log(Level.SEVERE, "Failed to send SIGUSR1 to subserver.", e); } @@ -162,7 +164,7 @@ public class Subserver { public void stop() { try { - process.destroy(); + serverProcess().destroy(); if (!process.waitFor(1, TimeUnit.MINUTES)) { forceStop(); } else if (thread.isAlive()) { @@ -177,6 +179,7 @@ public class Subserver { public void forceStop() { try { logger.log(Level.SEVERE, () -> serverName + " did not stop correctly, forcibly stopping!"); + serverProcess().destroyForcibly(); process.destroyForcibly(); if (thread.isAlive()) thread.join();