>Java >java지도 시간 >Java가 SIGKILL 신호를 처리할 수 있습니까? 정상적인 종료의 대안은 무엇입니까?

Java가 SIGKILL 신호를 처리할 수 있습니까? 정상적인 종료의 대안은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 02:41:09741검색

Can Java Handle SIGKILL Signals, and What's the Alternative for Graceful Shutdown?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.