【问题标题】:Error Handling in Linux DaemonLinux 守护进程中的错误处理
【发布时间】:2012-05-07 02:00:15
【问题描述】:
我正在编写一个服务器 Linux 守护程序。我想知道 UNIX/Linux 社区中的协议是什么,当守护程序遇到 fatal 错误(例如,服务器无法侦听、分段错误等)时应该做什么。我已经完成了系统日志的全部工作,但我想知道如何处理致命错误。我应该记录并继续在一个无限的、无所事事的循环中运行吗?我应该登录并退出吗?这里的标准做法是什么?我该怎么做?
守护程序是用 C++ 编写的,并且我使用自定义异常系统来包装 POSIX 错误代码,所以我会知道什么时候是致命的。
【问题讨论】:
标签:
c++
linux
unix
daemon
【解决方案1】:
存在“致命错误”的程度。
服务器无法侦听可能是暂时的问题;您的守护进程可能会继续尝试连接,可能会定期重试,然后缓慢退出(1 秒、2 秒、4 秒等)。
如果您发现 seg 错误,也许最好的办法是通过重新执行守护程序来尝试重新启动自身。当然,它可能会再次发生。
您不应该陷入无限的无所事事循环;你应该终止而不是那样做。如果您的循环不是无限的,但可能会被信号或其他东西破坏,那么什么都不做也可以;我推荐 pause() 系统调用作为不消耗 CPU 时间的不做任何事情的方法。
您当然应该在退出前记录您正在做的事情以及原因。