JVM-ran (실제로 스칼라로 작성되었지만 Groovy, Clojure 또는 pure Java에 대해 솔루션이 거의 동일하다고 생각하는 경향이 있음) 내 컴퓨터 프로그램은 Ctrl을 눌러 종료됩니다. + C (또는 시스템 종료 순서에 따라 프로그램에 차이가 있는지 모르겠다.) 응용 프로그램이 수정하는 외부 리소스 (데이터베이스, 파일, 웹 서비스 추상화 된 리소스)를 확인하려면 어떻게해야합니까? 예측 가능하고 비 논리적으로 손상된 상태로 남겨 둡니까?JVM 콘솔 어플리케이션에서^C를 다루는 방법은 무엇입니까?
5
A
답변
7
Runtime.addShutdownHook을 살펴보십시오.
당신은 일반적으로 너무 그것을 사용한다 :
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
3
이 신호를 트랩하여 자원을 차단할 수 있습니다. 대부분의 서비스는 정상적으로 종료 할 필요는 없지만 일반적으로 작성하는 파일은 정상적으로 처리해야합니다.
셧다운 훅을 추가하는 것만으로도 충분합니다. 그러나 나는이 상황을 시험해 볼 것입니다.
10
당신은 다른 사람들이 지적으로 종료 훅을 구현하려고하지만 수 : 가상 머신이 중지됩니다 드문 상황에서
, 즉, 을 완전히 종료하지 않고 실행하십시오. 가상 컴퓨터가 외부에서 종료 된 경우 (예 : Unix의 경우 SIGKILL 신호 또는 Microsoft Windows의 경우 TerminateProcess 호출). 예를 들어 이 내부 데이터 구조를 손상 시키거나 존재하지 않는 메모리 인 에 액세스하려고 시도하여 원시 메소드가 실패 할 경우 가상 시스템 도 중단 될 수 있습니다. 가상 시스템이 중단되면 시스템 종료 훅이 실행되는지 여부에 대한 보장이 이루어지지 않습니다 ( ).
내가 생각하기에, 응용 프로그램에 트랜잭션 컨텍스트를 도입해야한다고 생각합니다. 꽤 쉬운 데이터베이스의 경우, 파일 시스템에 대해서는 Apache Commons Transaction
관련 문제
- 1. 하나의 클래스에서 여러 스레드를 다루는 방법은 무엇입니까?
- 2. mod_rewrite의 쿼리 문자열에서 "#"을 다루는 방법은 무엇입니까?
- 3. 여러 텍스트 도메인을 다루는 방법은 무엇입니까?
- 4. strang jpgc 형식을 다루는 방법은 무엇입니까?
- 5. github에서 암호를 다루는 가장 좋은 방법은 무엇입니까?
- 6. 객체 속성에서 공백을 다루는 방법은 무엇입니까?
- 7. StructureMap에서 동작 변형을 다루는 방법은 무엇입니까?
- 8. XSLT에서 네임 스페이스를 다루는 방법은 무엇입니까?
- 9. iOS에서 다른 환경을 다루는 방법은 무엇입니까?
- 10. DOMCategory보다 dom을 더 잘 다루는 방법은 무엇입니까?
- 11. 안드로이드에서 lange의 양을 다루는 방법은 무엇입니까?
- 12. Android XLarge 화면을 다루는 방법은 무엇입니까?
- 13. 프로그램에서 매개 변수를 다루는 방법은 무엇입니까?
- 14. 여러 사용자가 localStorage를 다루는 방법은 무엇입니까?
- 15. 다국어 웹 컨텐츠를 다루는 방법은 무엇입니까?
- 16. SQLite 데이터베이스를 다루는 가장 좋은 방법은 무엇입니까?
- 17. 자바에서 URI와 URI를 다루는 방법은 무엇입니까?
- 18. setuptools가 전이 의존성을 다루는 방법은 무엇입니까?
- 19. Eclipse CDT + Cygwin을 다루는 방법은 무엇입니까?
- 20. .Net 또는 JVM 언어를 만드는 방법은 무엇입니까?
- 21. 쉘 스크립트에서 JVM 실행을 종료하는 방법은 무엇입니까?
- 22. jvm 인수에 시스템 ip를 설정하는 방법은 무엇입니까?
- 23. 현재 jvm 클래스 경로를 찾는 방법은 무엇입니까?
- 24. IntelliJ의 RemoteMavenServer에 JVM 옵션을 설정하는 방법은 무엇입니까?
- 25. 명령 줄에서 JVM charset을 설정하는 방법은 무엇입니까?
- 26. JVM 명령어 란 무엇입니까?
- 27. JVM 스케줄링 알고리즘이란 무엇입니까?
- 28. 디버깅이 중간에 중단되면 Windows C 콘솔 앱이 JVM 내에서 실행됩니다.
- 29. 콘솔 입력에 쓰고 콘솔 핸들을 얻는 방법은 무엇입니까?
- 30. 젠킨스 콘솔 출력에 응용 프로그램의 콘솔 출력을 추출하는 방법은 무엇입니까?
+1 또한 정전 및 시스템 장애로부터 프로그램을 보호 할 수있는 유일한 방법입니다. – josefx