再次让父进程退出并让孙子进程继续执行,(这样确保了子进程不会成为会话组长,进程永远不会重新请求一个控制终端--根据SystemV中获取终端规则)
4、清除进程的umask(确保daemon创建文件和目录时拥有必要的权限...)
5、修改进程当前工作目录(通常改为根目录 /,保证根目录的文件系统不会被卸载即可,如:cron会将自身放在/var/spool/cron 目录下)
6、关闭daemon从父进程继承而来的所有打开着的文件描述符...(由于daemon失去了控制终端,对0,1,2描述符完全可以关闭;无法卸载长时间运行的daemon打开的文件所在的文件系统----文件描述符是一种有限资源)
7、关闭0,1,2文件描述符后,daemon...通常会打开/dev/null,并让所有描述符都指向该设备
--这样确保了当daemon调用在这些文件描述符上执行IO的库函数时不会出乎意料的失败;
实例:
import sys,os,time..., e:
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit