Partager via


Le runtime .NET ne fournit plus de gestionnaires de signal d’arrêt par défaut

Sur les systèmes Unix, le runtime .NET ne fournit plus de gestionnaire de signal SIGTERM par défaut. Sur Windows, le runtime .NET ne fournit plus de gestionnaires par défaut pour les signaux et CTRL_SHUTDOWN_EVENT lesCTRL_CLOSE_EVENT signaux, qui sont équivalents à Unix SIGTERM et SIGHUP aux signaux.

Cette modification rétablit le comportement de gestion des signaux d’arrêt sur ce qu’il était dans .NET Framework et dans le runtime Mono classique.

Version introduite

.NET 10

Comportement précédent

Auparavant, les gestionnaires de signal d’arrêt inscrits par le runtime .NET par défaut déclenchent une sortie d’application normale. Les événements AppDomain.ProcessExit et AssemblyLoadContext.Unloading ont été déclenchés avant la sortie de l’application.

Nouveau comportement

À compter de .NET 10, le runtime .NET ne remplace pas la gestion des signaux d’arrêt fournie par le système d’exploitation. Le gestionnaire de signal d’arrêt par défaut classique fourni par le système d’exploitation met fin immédiatement à l’application. Les événements AppDomain.ProcessExit et AssemblyLoadContext.Unloading ne sont pas déclenchés.

Type de changement cassant

Il s’agit d’un changement comportemental.

Raison de la modification

Les gestionnaires de signal d’arrêt inscrits par le runtime .NET par défaut étaient insuffisants pour certains modèles d’application (par exemple, les applications console et conteneurisées) et incompatibles avec d’autres modèles d’application (par exemple, les services Windows). Il est préférable de le laisser aux bibliothèques de niveau supérieur ou au code d’application pour inscrire des gestionnaires de signal appropriés pour le modèle d’application donné.

  • Aucune action n’est nécessaire pour les applications ASP.NET typiques ou celles qui utilisent des API de niveau supérieur, telles que HostingHostBuilderExtensions.UseConsoleLifetime, pour gérer les préoccupations spécifiques au modèle d'application. Ces API de niveau supérieur inscrivent des gestionnaires pour SIGTERM et d’autres signaux, selon le cas.

  • Si vous souhaitez gérer les signaux d’arrêt sans dépendre des bibliothèques de niveau supérieur, vous pouvez répliquer le comportement précédent en créant des gestionnaires de signal d’arrêt dans votre Main méthode à l’aide de l’API 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 affectées