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