Chinaunix首页 | 论坛 | 博客
  • 博客访问: 610231
  • 博文数量: 142
  • 博客积分: 116
  • 博客等级: 入伍新兵
  • 技术积分: 1445
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-28 08:37
文章分类

全部博文(142)

文章存档

2017年(7)

2016年(57)

2015年(48)

2014年(30)

我的朋友

分类: Python/Ruby

2015-02-16 09:18:51


  1. #!/usr/bin/env python
  2. import os
  3. import syslog
  4. import time
  5. def showProcessInfo(msg):
  6.     # ps -eo pid,ppid,pgid,pgrp,sess,tty,tpgid,cmd
  7.     pid=os.getpid()
  8.     ppid=os.getppid()
  9.     pgid=os.getpgid(0)
  10.     pgrp=os.getpgrp()
  11.     sid=os.getsid(0)

  12.     print "%s pid=%d ppid=%d pgid=%d pgrp=%d sid=%d" % \
  13.           (msg, pid, ppid, pgid, pgrp, sid)

  14. def lf_syslog_open():
  15.     syslog.openlog("pydaemon", syslog.LOG_PID, syslog.LOG_DAEMON)

  16. def daemonize():
  17.     # fork1
  18.     pid=os.fork()
  19.     if pid<0:
  20.         # error
  21.         print "fork1 error"
  22.         return -1
  23.     elif pid>0:
  24.         # parent.
  25.         exit(0)
  26.     else:
  27.         # child.
  28.         pass
  29.     showProcessInfo("fork 1 ok")

  30.     os.setsid()
  31.     showProcessInfo("setsid ok")

  32.     # fork2
  33.     pid=os.fork()
  34.     if pid<0:
  35.         # error
  36.         print "fork2 error"
  37.         return -1
  38.     elif pid>0:
  39.         # parent.
  40.         exit(0)
  41.     else:
  42.         # child.
  43.         pass
  44.     showProcessInfo("fork 2 ok")

  45.     os.chroot("/")
  46.     os.umask(022)
  47.     os.close(0)
  48.     os.close(1)
  49.     os.close(2)
  50.     fd=os.open('/dev/null', 2)
  51.     os.dup(fd)
  52.     os.dup(fd)

  53.     showProcessInfo("daemonize ok (should not be printed)")
  54.     syslog.syslog(syslog.LOG_INFO, "daemonize ok")

  55. # main
  56. if __name__ == "__main__":
  57.     # invoke from shell
  58.     print "hello"
  59.     showProcessInfo("main start")
  60.     lf_syslog_open()
  61.     daemonize()

  62.     # daemon process
  63.     time.sleep(10)

  64.     syslog.closelog()
  65.     showProcessInfo("main end")

阅读(1113) | 评论(0) | 转发(0) |
0

上一篇:NFS配置笔记

下一篇:c守护进程

给主人留下些什么吧!~~