我创造了一个.NET核心控制台应用程序作为守护进程在Ubuntu 14.04机器上运行.
我想在不强制的情况下停止服务,以便能够处理终止事件.
我怎样才能做到这一点?
我创造了一个.NET核心控制台应用程序作为守护进程在Ubuntu 14.04机器上运行.
我想在不强制的情况下停止服务,以便能够处理终止事件.
我怎样才能做到这一点?
您希望能够向正在运行的进程发送SIGTERM:
kill <PID>
并且过程应该正确地处理它以关闭.
不幸的是,.NET Core没有很好的文档记录,但它能够处理Unix信号(以不同于Mono的方式).GitHub issue
如果使用Ubuntu和Upstart,则需要一个init脚本,在停止请求时发送kill信号:Example init script
将依赖项添加到project.json:
"System.Runtime.Loader": "4.0.0"
这将给你AssemblyLoadContext美元.
然后可以处理SIGTERM事件:
AssemblyLoadContext.Default.Unloading += MethodInvokedOnSigTerm;
注:
使用Mono,正确的处理方法是通过UnixSignal:Mono.Unix.Native.Signum.SIGTERM
EDIT:
正如@Marc在最近的回答中指出的,这不再是实现这一目标的最佳方式.From .NET Core 2.0 AppDomain.CurrentDomain.ProcessExit
是受支持的事件.