Python 守护进程

发布时间:2019-09-19 08:02:03编辑:auto阅读(1592)

     nohup 可以使程序后台运行不受终端影响,但想使程序运行后就脱离终端Python需要用到os.fork来实现,例子如下:

    daemonize.py

    1. #!/usr/bin/python 
    2. #coding:utf-8 
    3.  
    4. import sys 
    5. import os 
    6.  
    7. def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): 
    8.     try
    9.         pid = os.fork() 
    10.         if pid > 0
    11.             sys.exit(0
    12.     except OSError, e: 
    13.         sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errorno, e.strerror)) 
    14.         sys.exit(1
    15.          
    16.     os.chdir('/'
    17.     os.umask(0
    18.     os.setsid() 
    19.      
    20.     try
    21.         pid = os.fork() 
    22.         if pid > 0
    23.             sys.exit(0
    24.     except OSError, e: 
    25.         sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errorno, e.strerror)) 
    26.         sys.exit(1
    27.          
    28.     for f in sys.stdout, sys.stderr: 
    29.         f.flush() 
    30.      
    31.     si = file(stdin, 'r'
    32.     so = file(stdout, 'a+'
    33.     se = file(stderr, 'a+'0
    34.     os.dup2(si.fileno(), sys.stdin.fileno()) 
    35.     os.dup2(so.fileno(), sys.stdout.fileno()) 
    36.     os.dup2(se.fileno(), sys.stderr.fileno()) 

    然后我们来调用daemonize接口,使脚本后台运行:

    test.py

    1. #!/usr/bin/python 
    2. #coding:utf-8 
    3.  
    4. from daemonize import daemonize 
    5. import sys 
    6. import time 
    7.  
    8. def test(): 
    9.     while True
    10.         sys.stdout.write("Hello!"
    11.         time.sleep(1
    12.          
    13. if __name__ == "__main__"
    14.     daemonize(stdout='/home/wisp/test_print.log', stderr='/home/wisp/test_print.log'
    15.     test() 

    运行test.py后,test.py就会后台运行!~~

关键字

上一篇: python—连接mongodb

下一篇: Python file 方法