Java의 SIGKILL 신호 처리
종종 kill -9 명령과 관련된 SIGKILL 신호는 어떤 프로그램에서도 처리하거나 캡처할 수 없습니다. Java 또는 다른 언어로. 이는 응답하지 않거나 악의적인 프로세스도 종료할 수 있도록 하는 의도적인 설계 기능입니다.
SIGKILL은 관리할 수 없으므로 제어된 종료 요청을 나타내는 SIGTERM 신호 처리에 중점을 두어야 합니다. Java는 프로그램이 SIGTERM을 수신하거나 정상적으로 종료될 때 실행될 종료 후크를 등록하기 위해 Runtime.addShutdownHook() 메서드를 제공합니다.
종료 후크 등록
등록하려면 종료 후크:
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // Perform cleanup tasks System.out.println("Shutdown hook ran!"); } });
예 프로그램
다음 테스트 프로그램은 OSX에서 종료 후크의 사용을 보여줍니다.
public class TestShutdownHook { public static void main(String[] args) throws InterruptedException { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("Shutdown hook ran!"); } }); while (true) { Thread.sleep(1000); } } }
kill -15(SIGTERM)를 사용하여 이 프로그램을 실행하면 "Shutdown"이 인쇄됩니다. 훅 달렸어!" 예상대로입니다.
kill -9 처리
앞서 언급했듯이 kill -9는 정상적으로 처리할 수 없습니다. 그러나 기본 애플리케이션을 모니터링하는 래퍼 스크립트나 감시자 프로그램을 사용하여 해결 방법을 구현할 수 있습니다. 기본 애플리케이션이 종료되거나 종료되면 감시자는 정리 작업을 수행하거나 다른 애플리케이션에 알릴 수 있습니다.
예제 래퍼 스크립트
#!/usr/bin/env bash java TestShutdownHook wait # notify your other app that you quit echo "TestShutdownHook quit"
위 내용은 Java가 SIGKILL 신호를 처리할 수 있습니까? 정상적인 종료의 대안은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!