Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
På Unix-system tillhandahåller .NET-körningen inte längre en SIGTERM-standardsignalhanterare. I Windows tillhandahåller .NET-körningen inte längre standardhanterare för signalernaCTRL_CLOSE_EVENT
ochCTRL_SHUTDOWN_EVENT
, som motsvarar Unix-signalenSIGTERM
.
Den här ändringen återställer SIGTERM-signalhanteringsbeteendet till vad det brukade vara i .NET Framework och klassisk Mono-körning.
Version lanserad
.NET 10 Förhandsversion 5
Tidigare beteende
Tidigare utlöste en SIGTERM-signalhanterare som registrerats av .NET-körningen som standard ett graciöst programavslut. AppDomain.ProcessExit och AssemblyLoadContext.Unloading händelser genererades innan programmet avslutades.
Nytt beteende
Från och med .NET 10 åsidosätter .NET-körningen inte SIGTERM-signalhanteringen som tillhandahålls av operativsystemet. Den typiska SIGTERM-signalhanteraren som tillhandahålls av operativsystemet avslutar programmet omedelbart. AppDomain.ProcessExit och AssemblyLoadContext.Unloading händelser aktiveras inte.
Typ av brytande ändring
Det här är en beteendeförändring.
Orsak till ändring
SIGTERM-signalhanteraren som registrerades av .NET-körningen som standard var både otillräcklig för vissa appmodeller (till exempel konsol- och containerbaserade program) och inkompatibla med andra appmodeller (till exempel Windows-tjänster). Det är bättre att lämna det till bibliotek på högre nivå eller programkod för att registrera signalhanterare som är lämpliga för den angivna appmodellen.
Rekommenderad åtgärd
Ingen åtgärd krävs för typiska ASP.NET program eller program som använder API:er på högre nivå, till exempel HostingHostBuilderExtensions.UseConsoleLifetime för att hantera appmodellspecifika problem. Dessa API:er på högre nivå registrerar hanterare för SIGTERM och andra signaler efter behov.
Om du vill hantera SIGTERM-signalen utan att behöva använda bibliotek på högre nivå kan du replikera det tidigare beteendet genom att skapa en SIGTERM-signalhanterare i din
Main
metod med hjälp av API:et PosixSignalRegistration.Create :
static void Main()
{
using var termSignalRegistration =
PosixSignalRegistration.Create(
PosixSignal.SIGTERM,
(_) => Environment.Exit(0));
// Your application code here
}