CLI (명령 줄 인터페이스) Java 애플리케이션에서 + (일반적으로 프로세스를 종료 함)를 어떻게 가로 챌 수 있습니까?CtrlC
다중 플랫폼 솔루션이 존재합니까 (Linux, Solaris, Windows)?
나는 Console
's를 사용 readLine()
하고 있지만 필요한 경우 다른 방법을 사용하여 표준 입력에서 문자를 읽을 수 있습니다.
CLI (명령 줄 인터페이스) Java 애플리케이션에서 + (일반적으로 프로세스를 종료 함)를 어떻게 가로 챌 수 있습니까?CtrlC
다중 플랫폼 솔루션이 존재합니까 (Linux, Solaris, Windows)?
나는 Console
's를 사용 readLine()
하고 있지만 필요한 경우 다른 방법을 사용하여 표준 입력에서 문자를 읽을 수 있습니다.
답변:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
이것은 신호를 가로 챌 수 있어야하지만 JVM이 완전히 종료되기 전에 중간 단계로만 수행되므로 돌보는 것이 아닐 수도 있습니다.
+로 트리거되는 신호 를 가로 채려면 SignalHandler
( sun.misc.SignalHandler
) 를 사용해야합니다 ( Windows뿐 아니라 Unix에서도). 이 기사를
참조 하십시오 (pdf, 페이지 8 및 9).SIGINT
CtrlC
정상적으로 종료하고 종료 프로세스를 단락시키지 않기를 원한다고 가정합니다. 내 가정이 맞다면 Shutdown Hooks를 살펴 봐야 합니다.
어떤 이유로 종료하지 않고 Ctrl+ 를 처리 할 수 있으려면 C특정 형태의 신호 처리를 사용해야합니다 ( Ctrl+ C입력은 실제로 애플리케이션에 직접 전달되지 않고 대신 생성하는 OS에 의해 처리되기 때문에). 그런 다음 Java로 전달되는 SIGINT.
신호 처리에 대한 자세한 내용 은 http://www.oracle.com/technetwork/java/javase/signals-139944.html 을 참조 하십시오 .
(정상적으로 종료하려면 akf의 대답으로 충분합니다.)
SIGTERM을 처리하는 방법에 대한 링크-프로그램이 OS 측에서받는 신호입니다.
http://blog.webinf.info/2008/08/intercepting-sigterm.html
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html
http://www.ibm.com/developerworks/java/library/i-signalhandling/
그것은 POSIX 운영 체제에서 작동해야합니다.