Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Em sistemas Unix, o tempo de execução do .NET não fornece mais um manipulador de sinal SIGTERM padrão. No Windows, o tempo de execução do .NET não fornece mais manipuladores padrão para os CTRL_SHUTDOWN_EVENT sinais e CTRL_CLOSE_EVENT , que são equivalentes ao Unix SIGTERM e SIGHUP sinais.
Essa alteração reverte o comportamento de manipulação do sinal de terminação para o que costumava ser no .NET Framework e no tempo de execução clássico do Mono.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, os manipuladores de sinal de terminação registrados pelo tempo de execução do .NET por padrão acionavam a saída normal do aplicativo. AppDomain.ProcessExit e AssemblyLoadContext.Unloading eventos foram acionados antes da saída do aplicativo.
Novo comportamento
A partir do .NET 10, o tempo de execução do .NET não substitui a manipulação do sinal de terminação fornecida pelo sistema operacional. O manipulador de sinal de terminação padrão típico fornecido pelo sistema operacional encerra o aplicativo imediatamente. AppDomain.ProcessExit e AssemblyLoadContext.Unloading os eventos não são gerados.
Tipo de mudança disruptiva
Trata-se de uma mudança de comportamento.
Motivo da mudança
Os manipuladores de sinal de terminação registrados pelo tempo de execução do .NET por padrão eram insuficientes para alguns modelos de aplicativo (por exemplo, aplicativos de console e em contêineres) e incompatíveis com outros modelos de aplicativo (por exemplo, serviços do Windows). É melhor deixar a tarefa para bibliotecas de alto nível ou código da aplicação registrar manipuladores de sinal apropriados para o modelo de aplicação dado.
Ação recomendada
Nenhuma ação é necessária para aplicativos ASP.NET típicos ou aplicativos que usam APIs de nível superior, como HostingHostBuilderExtensions.UseConsoleLifetime para lidar com preocupações específicas do modelo de aplicativo. Essas APIs de nível superior registram manipuladores para SIGTERM e outros sinais, conforme apropriado.
Se você quiser lidar com sinais de terminação sem depender de bibliotecas de nível superior, poderá replicar o comportamento anterior criando manipuladores de sinal de terminação em seu
Mainmétodo usando a 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
}