Ответ 1
Вы хотите отправить SIGTERM в выполняемый процесс:
kill <PID>
И процесс должен корректно завершить работу.
К сожалению, .NET Core недостаточно хорошо документирован, но способен обрабатывать сигналы Unix (в отличие от Моно). Проблема GitHub
Если вы используете Ubuntu с Upstart, вам нужно иметь init script, который отправляет сигнал kill на stop: Пример init script
Добавьте зависимость от вашего project.json:
"System.Runtime.Loader": "4.0.0"
Это даст вам AssemblyLoadContext.
Затем вы можете обработать событие SIGTERM:
AssemblyLoadContext.Default.Unloading += MethodInvokedOnSigTerm;
Примечание:
Используя Mono, правильный способ обращения с ним будет через UnixSignal: Mono.Unix.Native.Signum.SIGTERM