다음을 통해 공유


.NET 런타임은 더 이상 기본 종료 신호 처리기를 제공하지 않습니다.

Unix 시스템에서 .NET 런타임은 더 이상 기본 SIGTERM 신호 처리기를 제공하지 않습니다. Windows에서 .NET 런타임은 더 이상 Unix CTRL_SHUTDOWN_EVENTCTRL_CLOSE_EVENT 기본 처리기를 제공하지 않습니다.

이 변경은 종료 신호 처리 동작을 .NET Framework 및 클래식 Mono 런타임에 사용하던 동작으로 되돌려 줍니다.

도입된 버전

.NET 10

이전 동작

이전에는 .NET 런타임에서 기본적으로 등록된 종료 신호 처리기가 정상적으로 애플리케이션 종료를 트리거했습니다. AppDomain.ProcessExit 이벤트와 AssemblyLoadContext.Unloading 이벤트가 애플리케이션이 종료되기 전에 발생했습니다.

새 동작

.NET 10부터 .NET 런타임은 운영 체제에서 제공하는 종료 신호 처리를 재정의하지 않습니다. 운영 체제에서 제공하는 일반적인 기본 종료 신호 처리기는 애플리케이션을 즉시 종료합니다. AppDomain.ProcessExitAssemblyLoadContext.Unloading 이벤트는 발생하지 않습니다.

파괴적 변경 유형

이는 동작 변경.

변경 이유

기본적으로 .NET 런타임에 의해 등록된 종료 신호 처리기는 일부 앱 모델(예: 콘솔 및 컨테이너화된 애플리케이션)에 충분하지 않으며 다른 앱 모델(예: Windows 서비스)과 호환되지 않습니다. 지정된 앱 모델에 적합한 신호 처리기를 등록하려면 상위 수준 라이브러리 또는 애플리케이션 코드에 맡기는 것이 좋습니다.

  • 앱 모델 관련 문제를 처리하는 것과 같이 HostingHostBuilderExtensions.UseConsoleLifetime 더 높은 수준의 API를 사용하는 일반적인 ASP.NET 애플리케이션 또는 애플리케이션에는 아무런 조치가 필요하지 않습니다. 이러한 상위 수준 API는 SIGTERM 및 기타 신호에 대한 처리기를 적절하게 등록합니다.

  • 상위 수준 라이브러리에 종속되지 않고 종료 신호를 처리하려는 경우 API를 사용하여 메서드에서 종료 신호 처리기를 만들어 이전 동작을 Main 복제할 PosixSignalRegistration.Create 수 있습니다.

static void Main()
{
    using var termSignalRegistration =
        PosixSignalRegistration.Create(
            PosixSignal.SIGTERM,
            (_) => Environment.Exit(0));

    // Replicates the previous behavior on Windows
    using var sigHupSignalRegistration =
        PosixSignalRegistration.Create(
            PosixSignal.SIGHUP,
            (_) => Environment.Exit(0));

    // Your application code here
}

영향을 받는 API