webrick的强悍daemon代码
# File lib/webrick/server.rb, line 28 def Daemon.startexit!(0) if fork # 1
Process::setsid # 2
exit!(0) if fork# 3
Dir::chdir("/")# 4
File::umask(0)# 5
STDIN.reopen("/dev/null")# 6
STDOUT.reopen("/dev/null", "w")# 7
STDERR.reopen("/dev/null", "w") # 8
yield if block_given?# 9
end# 1: 产生一次fork,并且父进程退出(parent pid为true)
# 2:执行setsid,将子进程设置为新的进程领导
# 3:接着子进程再fork一次,并且子进程退出,子子进程留下来
# 4:改变执行家目录
# 5:设置文件目录掩码
# 6-7-8:重定向输入输出到/dev/null
# 9:执行传入的block
关键技巧是这里fork了两次。
很多daemon程序,如nagios,都这么做的。
目的是为了彻底摆脱僵尸进程。 能不能举个 fork 一次不行的例子?坚着一列看着像高级汇编一样,给力啊
页:
[1]