您的位置:首页 > 编程语言 > Python开发

Python中创建守护进程

2013-10-15 17:13 465 查看
python 创建守护进程

python 的os.setdid()提供了类似linux c api的 setsid

也可以通过unix双fork创建守护进程。

几个相关的函数

os.umask(0) #重设文件创建掩码,子进程会从父进程继承所有权限,可以通过调用这个方法将文件创建掩码初始化成系统默认。

os.setsid() #调用系统的setsid(),创建一个新的会话并创建组id

#!/usr/bin/env python
#coding:utf8
import sys, os
def main():
""" A demo daemon main routine, write a datestamp to
/tmp/daemon-log every 10 seconds.
"""
import time
f = open("/tmp/daemon-log", "w")
while 1:
f.write('%s/n' % time.ctime(time.time()))
f.flush()
time.sleep(10)
if __name__ == "__main__":
# do the UNIX double-fork magic, see Stevens' "Advanced
# Programming in the UNIX Environment" for details (ISBN 0201563177)
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
# decouple from parent environment
os.chdir("/")
os.setsid()
os.umask(0)
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent, print eventual PID before
print "Daemon PID %d" % pid
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
# start the daemon main loop
main()


  

代码引用自从:http://code.activestate.com/recipes/66012/download/1/


main为写时间戳的永久循环

运行后程序fork一个进程,如果fork成功则程序自己退出

通过setsid() 创建了一个独立于当前会话的进程

再一次fork一个进程,如果fork成功则当前程序退出

这时候进程的父进程就变成了 init,成为了一个独立的deamon
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: