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
  • 相关阅读:
    Python函数篇(7)-正则表达式
    Python函数篇(6)-常用模块及简单的案列
    Python函数篇(5)-装饰器及实例讲解
    Android 涂鸦最佳实践
    事件总线框架---Otto
    Android App补丁更新
    Android实现换肤功能(二)
    Android实现换肤功能(一)
    网络请求框架---Volley
    注解框架---AndroidAnnotations
  • 原文地址:https://www.cnblogs.com/zhiguo/p/3370599.html
Copyright © 2011-2022 走看看