Nice programing

CLI 애플리케이션에서 Ctrl + C를 어떻게 "차단"할 수 있습니까?

nicepro 2020. 10. 7. 08:19
반응형

CLI 애플리케이션에서 Ctrl + C를 어떻게 "차단"할 수 있습니까?


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).SIGINTCtrlC


나는 당신이 정상적으로 종료하고 종료 프로세스를 단락시키지 않기를 원한다고 가정합니다. 내 가정이 맞다면 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 운영 체제에서 작동해야합니다. 즉, Mac과 Unix가 Windows에서 작동해야합니다. 잘 모르겠습니다. POSIX도 어느 정도 호환되지만 버전이 다르면 다양 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/1216172/how-can-i-intercept-ctrlc-in-a-cli-application

반응형