Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf Unix-Systemen stellt die .NET-Runtime keinen Standard-SIGTERM-Signalhandler mehr bereit. Unter Windows stellt die .NET-Runtime keine Standardhandler mehr für die CTRL_SHUTDOWN_EVENT und CTRL_CLOSE_EVENT Signale bereit, die Äquivalente von Unix SIGTERM und SIGHUP Signalen sind.
Durch diese Änderung wird das Verhalten der Beendigungssignalbehandlung auf das Verhalten zurückgesetzt, das in .NET Framework und der klassischen Mono-Laufzeit verwendet wurde.
Eingeführte Version
.NET 10
Vorheriges Verhalten
Zuvor löste das Beenden von Signalhandlern, die von der .NET-Laufzeit registriert wurden, standardmäßig den ordnungsgemäßen Beenden der Anwendung aus. AppDomain.ProcessExit- und AssemblyLoadContext.Unloading-Ereignisse wurden ausgelöst, bevor die Anwendung beendet wurde.
Neues Verhalten
Ab .NET 10 überschreibt die .NET-Laufzeit die vom Betriebssystem bereitgestellte Signalbehandlung für das Beenden nicht. Der typische Standard-Beendigungssignalhandler, der vom Betriebssystem bereitgestellt wird, beendet die Anwendung sofort. AppDomain.ProcessExit- und AssemblyLoadContext.Unloading-Ereignisse werden nicht ausgelöst.
Art der einschneidenden Änderung
Dies ist eine Verhaltensänderung.
Grund für Änderung
Die standardmäßig von der .NET-Laufzeit registrierten Beendigungssignalhandler waren für einige App-Modelle (z. B. Konsolen- und containerisierte Anwendungen) nicht ausreichend und mit anderen App-Modellen nicht kompatibel (z. B. Windows-Dienste). Es ist besser, es bibliotheken oder Anwendungscode auf höherer Ebene zu überlassen, um Signalhandler zu registrieren, die für das jeweilige App-Modell geeignet sind.
Empfohlene Aktion
Für typische ASP.NET-Anwendungen oder Anwendungen, die APIs auf höherer Ebene verwenden, wie z.B. HostingHostBuilderExtensions.UseConsoleLifetime, um spezifische Anliegen des App-Modells zu verwalten, ist keine Aktion erforderlich. Diese höherstufigen APIs registrieren gegebenenfalls Handler für SIGTERM und andere Signale.
Wenn Sie Beendigungssignale behandeln möchten, ohne eine Abhängigkeit von Bibliotheken auf höherer Ebene zu nehmen, können Sie das vorherige Verhalten replizieren, indem Sie Beendigungssignalhandler in Ihrer
MainMethode mithilfe der PosixSignalRegistration.Create API erstellen:
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
}