daemon进程
守护进程
1.fork子进程,而后父进程退出,此时子进程会被init进程接管
2.修改子进程的工作目录,创建新进程组和新会话,修改umask
3.子进程再次fork一个进程,这个进程可以称为孙子进程,而后子进程退出
4.重定向孙子进程标准输入流,标准输出等
atexit程序退出 调用某个函数
kill 级别
#!/usr/bin/env python
import time
import os
import sys
import atexit
import signal
def run():
while True:
print "1time"
time.sleep(1)
print os.getpid()
def writeData(signum, frame):
with open('/tmp/data.txt', 'a+') as fd:
fd.write('abcd\n')
def writePid(name, pid):
pidpath = os.path.join('/tmp','%s.pid' % name)
with open(pidpath, 'w') as fd:
fd.write(str(pid))
def delPid(name):
pidpath = os.path.join('/tmp','%s.pid' % name)
os.remove(pidpath)
def term(signum, frame):
raise SystemExit(u'terminated by %(signum)r' % vars())
def daemon(name):
try:
pid = os.fork()
if pid > 0:
print "1st pid", pid
sys.exit(0)
except OSError, e:
print e
sys.exit(1)
os.chdir('/')
os.setsid()
os.setgid(99)
os.setuid(99)
os.umask(0)
try:
pid = os.fork()
if pid > 0:
writePid(name,pid)
print "2nd pid", pid
sys.exit(0)
except OSError, e:
print e
sys.exit(1)
stdin = file('/dev/null', 'r')
stdout = file('/dev/null', 'w')
stderr = file('/dev/null', 'w',0)
os.dup2(stdin.fileno(), sys.stdin.fileno())
os.dup2(stdout.fileno(), sys.stdout.fileno())
os.dup2(stderr.fileno(), sys.stderr.fileno())
atexit.register(delPid, name=name)
signal.signal(signal.SIGTERM, term)
signal.signal(signal.SIGHUP, writeData)
if __name__ == '__main__':
if len(sys.argv) == 2 and sys.argv[1] == '-d':
daemon('example-daemon')
run()
转载于:https://blog.51cto.com/muzinan110/1439037