프로세스가 SIGTERM을 수신하고 하위 프로세스(예: /bin/sh 명령을 실행하는 JVM)를 생성할 때 어떤 일이 발생하는지 알고 싶습니다.
어떤 종류의 자동화가 있습니까, 아니면 상위 프로세스가 종료되고 하위 프로세스도 SIGTERM 신호를 수신합니까? 종료되나요?
답변1
Linux 프로세스가 SIGTERM을 수신할 때 어떤 일이 발생하는지(및 하위 프로세스에 어떤 일이 발생할 수 있는지)는 전적으로 프로그래머의 희망에 달려 있습니다.
프로세스는 단순히 무시하고(평소와 같이 비즈니스를 계속), 갑자기 종료되어 하위 프로세스를 고아로 남겨두거나, 결국 하위 프로세스 이상으로 신호를 전파할 수 있는 일부 프로세스 내 구축 코드(관련 소프트웨어 인터럽트 핸들러)를 실행하도록 지시할 수 있습니다. 주의 깊은.
Java Virtual Machine에는 다음과 같은 용도로 사용할 수 없는 고유한 특성이 있습니다.예…;-)
신호 용어? 그냥 무시하세요(알았어!고마워하는XRS 추가 옵션, 다른 코드가 이를 더 적절하게 처리합니다.
JVM에 포함된 애플리케이션은 JVM 신호 처리기와 간섭을 일으킬 수 있는 SIGINT 또는 SIGTERM과 같은 신호를 캡처해야 하는 경우가 많습니다. -Xrs 옵션을 사용하여 이 문제를 해결할 수 있습니다. -Xrs를 사용하면 JVM은 SIGINT, SIGTERM, SIGHUP 및 SIGQUIT에 대한 신호 마스크를 변경하지 않으며 이러한 신호에 대한 신호 처리기가 설치되지 않습니다.
어떤 어린이에게 무슨 일이 일어나는가? 음...모든 것은 임베딩 애플리케이션에 따라 다릅니다.
신호 용어? 그냥... 우아하게 닫으세요!
모든 Java 프로그램 연결 가능클로즈 훅기계에. 즉, 충돌이 발생하기 전에 JVM이 실행해야 하는 코드입니다. 다음과 같이 간단합니다.
public class ShutDownHook
{
public static void main(String[] args)
{
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
System.out.println("Shutdown Hook is running !");
}
});
System.out.println("Application Terminating ...");
}
}
이를 통해 개발자는 자식 프로세스를 마음대로 종료하거나 시스템 가동 중지 시간으로 인해 일부 하위 프로세스가 갑자기 종료되도록 할 수도 있습니다.
JVM(및 일반적인 VM)은 특정 신호(특히 SIGTERM)의 처리가 가상 머신의 내부 신호 처리기 외부에서 코딩(및 사용자 정의)될 수 있다는 점에서 표준 Linux 프로세스와 크게 다릅니다. 이를 통해 가상 머신이 종료되더라도 코드가 실행될 수 있습니다.