우리는 자바 에이전트를 작성하는데, 그 중에서도 java.awt.TrayIcon을 사용하는 일종의 GUI를 제공합니다. 이 에이전트를에서 사용할 때, 예 : 톰캣, 우리는 다음과 같은 문제가 : 아이콘이 javaagent, systray 및 shutdown
- 사용자가 쉘 스크립트를 추가
- 우리의 에이전트를 사용하여 Tomcat을 시작이 있다는 것을,
- AWT 이벤트 스레드가 보는 쉘 스크립트를 사용하여 Tomcat을 종료 여전히 디스플레이 구성 요소, 시스템 트레이 아이콘 및 AWT 이벤트 스레드가 아닌 데몬 스레드로
- 을 종료하지 않고, 전체 응용 프로그램을 종료 할 수 없습니다
이제 응용 프로그램을 종료 할 수 있도록하기 위해 무엇을해야합니까? AWT Event dispatch thread 데몬을 만들 수 있습니까? 에이전트의 종료 후크가 있습니까? 다른 건 없니?
아쉽게도 JVM이 실제로 종료되지 않으므로 종료 훅은 호출되지 않습니다. 정확히 AWT 이벤트 스레드는 계속해서 실행됩니다. – Nikem
어떤 OS를 사용하고 있습니까? * ix에서 SIGTERM은 종료 훅을 트리거하고 SIGKILL은 비 데몬 실행 스레드에도 불구하고 강제로 JVM을 종료합니다. –
예,하지만 JVM을 강제 종료하거나 종료하는 것에 대해 이야기하는 것이 아닙니다. 문제는 main 메소드가 종료 될 때 JVM이 자연스럽게 종료되도록하는 방법입니다. 종료 훅은 호출되지 않기 때문에 메인 메소드가 종료되었지만 비 데몬 스레드가 계속 실행 중일 때. – Nikem