免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2715 | 回复: 1
打印 上一主题 下一主题

webrick的强悍daemon代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-14 09:36 |只看该作者 |倒序浏览
# File lib/webrick/server.rb, line 28
  1.    def Daemon.start
  2.      exit!(0) if fork   # 1
  3.      Process::setsid   # 2
  4.      exit!(0) if fork  # 3
  5.      Dir::chdir("/")  # 4
  6.      File::umask(0)  # 5
  7.      STDIN.reopen("/dev/null")  # 6
  8.      STDOUT.reopen("/dev/null", "w")  # 7
  9.      STDERR.reopen("/dev/null", "w") # 8
  10.      yield if block_given?  # 9
  11.    end
复制代码
# 1: 产生一次fork,并且父进程退出(parent pid为true)
# 2:执行setsid,将子进程设置为新的进程领导
# 3:接着子进程再fork一次,并且子进程退出,子子进程留下来
# 4:改变执行家目录
# 5:设置文件目录掩码
# 6-7-8:重定向输入输出到/dev/null
# 9:执行传入的block

关键技巧是这里fork了两次。
很多daemon程序,如nagios,都这么做的。
目的是为了彻底摆脱僵尸进程。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2010-12-14 10:12 |只看该作者
能不能举个 fork 一次不行的例子?坚着一列看着像高级汇编一样,给力啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP