首页 > 系统服务 > 详细

linux 下通过fork实现后台运行进程

时间:2021-05-07 10:33:49      阅读:23      评论:0      收藏:0      [点我收藏+]
 1 # 通常建议使用双fork方法。在每个fork处,父级退出,子级继续
 2 
 3 #!/usr/bin/env python
 4 
 5 import time,platform
 6 
 7 import os
 8 def funzioneDemo():
 9 
10     # 这是具体业务函数示例
11 
12     fout = open(/tmp/demone.log, w)
13 
14     while True:
15 
16         fout.write(time.ctime()+\n)
17 
18         fout.flush()
19 
20         time.sleep(2)
21 
22     fout.close()
23 def createDaemon():
24 
25     # fork进程 ,首先fork在setsid之前,确保进程不是进程组领导       
26 
27     try:
28 
29         if os.fork() > 0: os._exit(0)
30 
31     except OSError, error:
32 
33         print fork #1 failed: %d (%s) % (error.errno, error.strerror)
34 
35         os._exit(1)    
36 
37     os.chdir(/)
38 
39     os.setsid()
40 
41     os.umask(0)
42 # 在setsid之后的第二个fork确保与控制终端的新关联不会仅仅通过打开终端设备来启动
43     try:
44 
45         pid = os.fork()
46 
47         if pid > 0:
48 
49             print Daemon PID %d % pid
50 
51             os._exit(0)
52 
53     except OSError, error:
54 
55         print fork #2 failed: %d (%s) % (error.errno, error.strerror)
56 
57         os._exit(1)
58 
59     # 重定向标准IO
60 
61     sys.stdout.flush()
62 
63     sys.stderr.flush()
64 
65     si = file("/dev/null", r)
66 
67     so = file("/dev/null", a+)
68 
69     se = file("/dev/null", a+, 0)
70 
71     os.dup2(si.fileno(), sys.stdin.fileno())
72 
73     os.dup2(so.fileno(), sys.stdout.fileno())
74 
75     os.dup2(se.fileno(), sys.stderr.fileno())
76     # 在子进程中执行代码
77 
78     funzioneDemo() # function demo
79 if __name__ == __main__: 
80 
81     if platform.system() == "Linux":
82 
83         createDaemon()
84 
85     else:
86 
87         os._exit(0)

 

linux 下通过fork实现后台运行进程

原文:https://www.cnblogs.com/fdzwdt/p/14737702.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!