How can I intercept Ctrl+C (which normally would kill the process) in a CLI (command line interface) Java application?
Does a multi-platform solution exist (Linux, Solaris, Windows)?
I'm using Console
's readLine()
, but if necessary, I could use some other method to read characters from standard input.
Signal. handle(new Signal("INT"), // SIGINT signal -> System. out. println("Interrupted by Ctrl+C"));
Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { /* my shutdown code here */ } });
This should be able to intercept the signal, but only as an intermediate step before the JVM completely shutdowns itself, so it may not be what you are looking after.
You need to use a SignalHandler
(sun.misc.SignalHandler
) to intercept the SIGINT
signal triggered by a Ctrl+C (on Unix as well as on Windows).
See this article (pdf, page 8 and 9).
I am assuming you want to shutdown gracefully, and not do short circuit the shutdown process. If my assumption is correct, then you should look at Shutdown Hooks.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With