diff options
| author | 2026-07-01 22:07:44 +0200 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | cf6c30c75b4569cc60fa731434274b2bc249fdbc (patch) | |
| tree | 04fe627e21b4f87ef75d214f2ce77369838dffbf /src/main/java/com/it_jaros/jscanner/App.java | |
| parent | db4294a000dd101073e1ff9f76f6687bac3ba06c (diff) | |
Make scanner gracefully shutdown on Strg-C
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/App.java')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/App.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/App.java b/src/main/java/com/it_jaros/jscanner/App.java index 27ccfb9..119c42d 100644 --- a/src/main/java/com/it_jaros/jscanner/App.java +++ b/src/main/java/com/it_jaros/jscanner/App.java @@ -5,11 +5,16 @@ import java.util.List; import java.util.stream.Collectors; public class App { + + private static Thread shutdownHook; + public static void main(String[] args) { CliParser cliParser = new CliParser(); + try { ScanOptions options = cliParser.parseArgs(args); Scanner scanner = new Scanner(options); + addShutdownHook(scanner, options.showFilteredPorts()); printResults(scanner.scan(options), options.showFilteredPorts()); } catch (IllegalArgumentException e) { System.out.printf("Error while parsing arguments: %s", e.getMessage()); @@ -17,6 +22,28 @@ public class App { cliParser.usageAndExit(); } catch (Exception e) { System.out.printf("ERROR: %s", e.getMessage()); + } finally { + removeShutdownHook(); + } + } + + private static void addShutdownHook(Scanner scanner, boolean showFilteredPorts) { + shutdownHook = new Thread(() -> { + System.err.println("\nCtrl-C received."); + scanner.cancel(); + }); + Runtime.getRuntime().addShutdownHook(shutdownHook); + } + + private static void removeShutdownHook() { + if (shutdownHook == null) { + return; + } + + try { + Runtime.getRuntime().removeShutdownHook(shutdownHook); + } catch (IllegalStateException ignored) { + // JVM is already shutting down } } |
