- 论坛徽章:
- 0
|
# File lib/webrick/server.rb, line 28- def Daemon.start
- exit!(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,都这么做的。
目的是为了彻底摆脱僵尸进程。 |
|