Используя Mono, правильный способ обращения с ним будет через UnixSignal: Mono.Unix.Native.Signum.SIGTERM
Ответ 2
.NET Core значительно развился после ответа @Stefano год назад. В .NET Core 2.0 теперь вы можете использовать хорошо известное событие AppDomain.CurrentDomain.ProcessExit вместо AssemblyLoadContext.Default.Unloading. Он отлично работает для консольных приложений на Linux, а также в Docker.