일부 Java 응용 프로그램을 실행 중이며 종료/모든 응용 프로그램을 정상적으로 Windows 박쥐 스크립트에서 닫아야합니다. 그럼 내 질문은 :
windows bat 스크립트로 종료 후크를 호출하고 정상적으로 종료 된 java 프로그램을 호출하는 방법.Java 프로세스의 정상 종료/종료를 수행하는 방법은 무엇입니까?
모든 의견을 환영합니다. 미리 감사드립니다.
일부 Java 응용 프로그램을 실행 중이며 종료/모든 응용 프로그램을 정상적으로 Windows 박쥐 스크립트에서 닫아야합니다. 그럼 내 질문은 :
windows bat 스크립트로 종료 후크를 호출하고 정상적으로 종료 된 java 프로그램을 호출하는 방법.Java 프로세스의 정상 종료/종료를 수행하는 방법은 무엇입니까?
모든 의견을 환영합니다. 미리 감사드립니다.
Java에서 "정상적인"종료는 일반적으로 모든 비 데몬 스레드가 정상적으로 작업을 완료하도록함으로써 수행됩니다. 응용 프로그램에서 일부 포트에서 "종료"명령을 수신하는 경우 스크립트에서 해당 포트에 대한 명령을 트리거 할 수 있습니다.이 포트를 사용하면 스레드가 작동하지 않도록 적절한 플래그를 설정할 수 있으므로 JVM을 종료 할 수 있습니다 . 아마 내가 해본 가장 간단한 방법 일 것입니다.
.bat 스크립트는 VM 외부 프로세스입니다. 따라서 여러분은 여러분의 자바 애플리케이션에 어떤 종류의 IPC를 구현해야 할 것이다. 상대적으로 간단한 옵션은 RMI 또는 JMX를 사용하는 것입니다.
다른 가능성은 응용 프로그램에서 볼 수있는 파일을 사용하는 것이며 .bat 스크립트로 수정할 수 있으므로 다른 프로세스가 종료해야한다는 것을 인식합니다.
Runtime
클래스의 addShutdownHook 메소드를 살펴보십시오.
Runtime.getRuntime().addShutdownHook(...);
UPDATE : 아래의 코멘트 당으로, * 괜찬아 kill 명령과 유사합니다 Windows 셸의 명령에서 taskkill이 있습니다. 예를 들어 TASKKILL /IM java.exe
은 모든 java 프로세스를 종료합니다. TASKLIST
은 실행중인 모든 프로세스를 찾는 데 사용할 수 있습니다. 이것을 shutdownhook과 함께 사용하면 필요한 풍부한 기능을 제공해야합니다.
그게 종료시 스레드를 호출하지만 종료 자체를 트리거하지는 않습니다. – weekens
Java 7 (아직 출시되지 않음)에는 파일 모니터링 API가 있으며, 지금은 opensource JNotify 라이브러리를 사용할 수 있습니다. – djna