Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V systémech Unix již modul runtime .NET neposkytuje výchozí obslužnou rutinu signálu SIGTERM. Modul runtime .NET ve Windows už neposkytuje výchozí obslužné rutiny proCTRL_SHUTDOWN_EVENT signály a CTRL_CLOSE_EVENT signály, což jsou ekvivalenty systémů Unix SIGTERM a SIGHUP signálů.
Tato změna vrátí chování zpracování signálu ukončení na to, co se použilo v rozhraní .NET Framework a klasickém modulu runtime Mono.
Verze byla představena
.NET 10
Předchozí chování
Dříve obslužné rutiny signálu ukončení zaregistrované modulem runtime .NET ve výchozím nastavení aktivovaly řádné ukončení aplikace. AppDomain.ProcessExit a AssemblyLoadContext.Unloading události byly vyvolány před ukončením aplikace.
Nové chování
Počínaje rozhraním .NET 10 modul runtime .NET nepřepíše zpracování signálu ukončení poskytovaného operačním systémem. Typická výchozí obslužná rutina signálu ukončení poskytovaná operačním systémem okamžitě ukončí aplikaci. AppDomain.ProcessExit a AssemblyLoadContext.Unloading události nejsou vyvolány.
Typ zásadní změny
Jedná se o změnu chování.
Důvod změny
Obslužné rutiny signálu ukončení zaregistrované modulem runtime .NET ve výchozím nastavení nebyly pro některé modely aplikací (například konzolové a kontejnerizované aplikace) nedostatečné a nekompatibilní s jinými modely aplikací (například služby pro Windows). Je lepší ponechat vyšší úrovni knihoven nebo aplikací registraci signálních obslužných funkcí vhodných pro daný model aplikace.
Doporučená akce
Pro typické aplikace ASP.NET nebo aplikace, které používají rozhraní API vyšší úrovně, jako je HostingHostBuilderExtensions.UseConsoleLifetime k řešení záležitostí specifických pro model aplikace, není nutné podniknout žádné kroky. Tato rozhraní API vyšší úrovně registrují obslužné rutiny pro SIGTERM a další signály podle potřeby.
Pokud chcete zpracovávat ukončovací signály bez závislosti na knihovnách vyšší úrovně, můžete předchozí chování replikovat vytvořením obslužných rutin signálu ukončení ve vaší
Mainmetodě pomocí PosixSignalRegistration.Create rozhraní API:
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
}