当前解决方案
PEP 3143(标准守护程序进程库)的参考实现现已作为python-daemon提供。
历史答案
Sander Marechal的代码示例优于最初于2004年发布的原始代码示例。我曾经为Pyro提供了一个守护程序,但如果不得不这样做,可能会使用Sander的代码。
成为行为良好的守护进程时,有很多事情要注意:
防止核心转储(许多守护程序以root身份运行,并且核心转储可以包含敏感信息)
在chroot监狱中表现正确
根据使用情况适当设置UID,GID,工作目录,umask和其他过程参数
放弃提升suid,sgid特权
正确的行为,如果启动一个已经脱离上下文中,如init,inetd等
为明智的守护程序行为设置信号处理程序,还可以根据用例确定特定的处理程序
重定向标准流stdin,stdout,stderr因为守护进程不再具有控制终端
将PID文件作为合作咨询锁处理,它本身就是蠕虫的完整罐,具有许多相互矛盾但有效的行为方式
在进程终止时允许适当的清理
实际上成为守护进程,而不会导致僵尸
其中一些是标准的,如规范的Unix文献所述(UNIX环境中的Advanced Programming,已故W. Richard Stevens,Addison-Wesley,1992年)。其他(例如流重定向和PID文件处理)是大多数守护程序用户期望的常规行为,但标准化程度较低。
PEP 3143 “标准守护程序进程库”规范涵盖了所有这些内容。该蟒蛇守护参考实现工作在Python 2.7版或更高版本,和Python 3.2或更高版本。