Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W systemach Unix środowisko uruchomieniowe platformy .NET nie zapewnia już domyślnej obsługi sygnałów SIGTERM. W systemie Windows środowisko uruchomieniowe platformy .NET nie udostępnia już domyślnych programów obsługi dla CTRL_SHUTDOWN_EVENT sygnałów iCTRL_CLOSE_EVENT, które są odpowiednikami systemów Unix SIGTERM i SIGHUP sygnałów.
Ta zmiana przywraca zachowanie obsługi sygnału zakończenia do tego, co było używane w programie .NET Framework i klasycznym środowisku uruchomieniowym Mono.
Wersja wprowadzona
.NET 10
Poprzednie zachowanie
Wcześniej programy obsługi sygnałów zakończenia zarejestrowane przez środowisko uruchomieniowe platformy .NET domyślnie wyzwalały bezproblemowe zakończenie aplikacji. AppDomain.ProcessExit i AssemblyLoadContext.Unloading zdarzenia zostały zgłoszone przed zamknięciem aplikacji.
Nowe zachowanie
Począwszy od platformy .NET 10, środowisko uruchomieniowe platformy .NET nie zastępuje obsługi sygnałów zakończenia udostępnianych przez system operacyjny. Typowa domyślna procedura obsługi sygnału zakończenia zapewniana przez system operacyjny natychmiast kończy aplikację. AppDomain.ProcessExit i AssemblyLoadContext.Unloading zdarzenia nie są wywoływane.
Typ zmiany przełamującej
Jest to zmiana zachowania.
Przyczyna zmiany
Programy obsługi sygnałów zakończenia zarejestrowane przez środowisko uruchomieniowe platformy .NET domyślnie były niewystarczające dla niektórych modeli aplikacji (na przykład konsoli i aplikacji konteneryzowanych) i niezgodnych z innymi modelami aplikacji (na przykład usługami systemu Windows). Lepiej pozostawić biblioteki wyższego poziomu lub kod aplikacji, aby zarejestrować programy obsługi sygnałów odpowiednie dla danego modelu aplikacji.
Zalecana akcja
Nie jest wymagane żadne działanie dla typowych aplikacji ASP.NET ani aplikacji korzystających z wyższych poziomów interfejsów API, takich jak HostingHostBuilderExtensions.UseConsoleLifetime, do obsługi problemów specyficznych dla modelu aplikacji. Te interfejsy API wyższego poziomu przypisują programy obsługi dla sygnałów takich jak SIGTERM i innych w razie potrzeby.
Jeśli chcesz obsługiwać sygnały zakończenia bez zależności od bibliotek wyższego poziomu, możesz replikować poprzednie zachowanie, tworząc procedury obsługi sygnałów zakończenia w
Mainmetodzie przy użyciu interfejsu PosixSignalRegistration.Create 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
}