zoukankan      html  css  js  c++  java
  • Python中创建守护进程

    python 创建守护进程

    • python 的os.setdid()提供了类似linux c api的 setsid
    • 也可以通过unix双fork创建守护进程。

      几个相关的函数

    1. os.umask(0) #重设文件创建掩码,子进程会从父进程继承所有权限,可以通过调用这个方法将文件创建掩码初始化成系统默认。
    2. 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/
    1. main为写时间戳的永久循环
    2. 运行后程序fork一个进程,如果fork成功则程序自己退出
    3. 通过setsid() 创建了一个独立于当前会话的进程
    4. 再一次fork一个进程,如果fork成功则当前程序退出
    5. 这时候进程的父进程就变成了 init,成为了一个独立的deamon
  • 相关阅读:
    MySql 踩坑小记
    Redux 实现过程的推演
    正则表达式的一些探索(偏JavaScript)
    [python工具] 如何使用plotly制作散列图
    使用epoll实现一个udp server && client
    python 实现一个简单tcp epoll socket
    [原创]差分放大器阻抗匹配计算+阻抗计算小工具
    将博客搬至CSDN
    [转]谈NAND Flash的底层结构和解析
    [原创]Fashion汽车定位器拆解
  • 原文地址:https://www.cnblogs.com/zhiguo/p/3370599.html
Copyright © 2011-2022 走看看