检测控制台应用程序何时关闭/终止?
我想为我的控制台应用程序安全退出,该应用程序将使用 mono 在 Linux 上运行,但我找不到解决方案来检测是否向其发送了信号或用户按下了 ctrl+c。
在 Windows 上,有一个内核函数 SetConsoleCtrlHandler 可以完成这项工作,但在单声道上不起作用。
如何在控制台应用程序上获取关闭事件以安全退出它?
I wanted to make a safe exit for my console application that will be running on linux using mono but I can't find a solution to detect wether a signal was sent to it or the user pressed ctrl+c.
On windows there is the kernel function SetConsoleCtrlHandler which does the job but that doesnt work on mono.
How do I get a closing event on my console application to safe exit it ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用
Mono.UnixSignal
,Jonathan Pryor 发布了一个很好的示例:http://www.jprl.com/Blog/archive/development/mono/2008/Feb-08.htmlMono 页面上还有一个较短的示例: 常见问题解答/技术/操作系统问题/信号处理:
You need to use
Mono.UnixSignal
, there's a good sample posted by Jonathan Pryor : http://www.jprl.com/Blog/archive/development/mono/2008/Feb-08.htmlThere's also a shorter example on Mono page: FAQ / Technical / Operating System Questions / Signal Handling:
作为提供 unix 和 windows 实现的示例,请参见下文。请注意,使用 Visual Studio 时您仍然可以包含 Mono.Posix dll。
我还添加了 SIGTERM 信号,因为当停止/重新启动应用程序作为服务时,这是由 unix 中的 systemd 触发的。
公开退出事件的接口
Unix 实现
Windows 实现
As an example of providing a unix and windows implementation see below. Note that you can still include the Mono.Posix dll when using Visual Studio.
I have added the SIGTERM signal as well because this is fired by systemd in unix when stopping / restarting your app as a service.
Interface to expose an exit event
Unix implementation
Windows implementation