Mar*_*ist 44
自从一年前@ Stefano回答以来,.NET Core已经有了很大的发展.在.NET Core 2.0中,您现在可以使用众所周知的AppDomain.CurrentDomain.ProcessExit
事件而不是AssemblyLoadContext.Default.Unloading
.它适用于Linux上的控制台应用程序,也适用于Docker.
Ste*_*nio 26
您希望能够将SIGTERM发送到正在运行的进程:
kill <PID>
Run Code Online (Sandbox Code Playgroud)
并且该过程应该处理它以正确关闭.
不幸的是,.NET Core没有很好的文档记录,但它能够处理Unix信号(以与Mono不同的方式).GitHub问题
如果你使用Ubuntu和Upstart,你需要的是一个init脚本,它在一个停止请求上发送kill信号:示例init脚本
向project.json添加依赖项:
"System.Runtime.Loader": "4.0.0"
Run Code Online (Sandbox Code Playgroud)
这将为您提供AssemblyLoadContext.
然后你可以处理SIGTERM事件:
AssemblyLoadContext.Default.Unloading += MethodInvokedOnSigTerm;
Run Code Online (Sandbox Code Playgroud)
注意:
使用Mono,正确的处理方式是通过UnixSignal:Mono.Unix.Native.Signum.SIGTERM
编辑:
正如@Marc在他最近的回答中指出的那样,这不再是实现这一目标的最佳方式.来自.NET Core 2.0 AppDomain.CurrentDomain.ProcessExit
是受支持的事件.
归档时间: |
|
查看次数: |
16929 次 |
最近记录: |