我如何编码单声道守护进程
我正在尝试为Linux编写一个Mono C#守护进程。
我想在完成处理时进行启动和停止,而不是仅仅杀死进程。
有没有人有这样的例子?
编辑:我想出了如何在debian中使用start-stop-daemon --background,所以我想我现在就使用它。
编辑:我在java中实现这一点,他们有这个不错的addShutdownHook捕获终止应用程序。 我需要花更多时间来整理单声道服务的依赖关系,或者找到一种方法来捕获应用程序终止。
有SessionEnd事件,但这只适用于服务而不适用于控制台应用程序
答:使用mono-service在linux上打包一个windows服务
您应该实施一项服务并使用单一服务。 谷歌为它,你会发现几个例子。
要以Unix方式接收通知(即使用信号),您希望对计划接收的每个信号使用Mono.Unix.UnixSignal,然后在一组信号上调用UnixSignal.WaitAny()。
您通常会在单独的线程上执行此操作。
一个简单的方法是监听(本地,高端)端口并从管理客户端接收命令,如绑定。
更为unix-ish的方式是使用UnixSignal注册信号处理程序,并在接收到某个信号时正确关闭。 查看Mono FAQ,“我可以在Mono上使用信号处理程序吗?” 为警告和一个例子。
狼疮找到了单服务,这是一个使用ServiceProcess
接口的托管过程。 可悲的是,这需要设置MONO_DISABLE_SHM
,这会禁用Mono中的某些功能,特别是跨进程IPC系统。