1 def becamedaemon(): 2 # 转换为守护进程 3 if platform.system().lower() == 'linux': 4 # do the unix double-fork magic, see stevens' "advanced 5 # programming in the unix environment" for details (isbn 0201563177) 6 try: 7 pid = os.fork() 8 if pid > 0: 9 # exit first parent 退出第一个父进程 10 sys.exit(0) 11 except oserror as e: 12 print("fork #1 failed: {}".format(e)) 13 return false 14 # decouple from parent environment 15 os.chdir("/") # 切换目录 16 os.setsid() # 新建会话 17 os.umask(0) # 重设文件创建掩码 18 # do second fork 19 try: 20 pid = os.fork() 21 if pid > 0: 22 # exit from second parent, print eventual pid before 23 sys.exit(0) # 退出第二个父进程 24 except oserror as e: 25 print("fork #2 failed: {}".format(e)) 26 return false 27 # 重定向标准输入流、标准输出流、标准错误 28 sys.stdout.flush() 29 sys.stderr.flush() 30 si = open("/dev/null", 'r') 31 so = open("/dev/null", 'a+') 32 se = open("/dev/null", 'ab+', 0) 33 os.dup2(si.fileno(), sys.stdin.fileno()) 34 os.dup2(so.fileno(), sys.stdout.fileno()) 35 os.dup2(se.fileno(), sys.stderr.fileno()) 36 else: 37 print("log srv switch to daemon process only valid in linux.") 38 return true
如对本文有疑问, 点击进行留言回复!!
linux下文本编辑器vim的使用方法(复制、粘贴、替换、行号、撤销、多文件操作)
网友评论