#!/usr/bin/env python
# encoding: utf-8
# description: 一个守护进程的简单包装类, 具备常用的start|stop|restart|status功能, 使用方便
# 需要改造为守护进程的程序只需要重写基类的run函数就可以了
# date: 2015-10-29
# usage: 启动: python daemon_class.py start
# 关闭: python daemon_class.py stop
# 状态: python daemon_class.py status
# 重启: python daemon_class.py restart
# 查看: ps -axj | grep daemon_class
import atexit
import os
import signal
import sys
import time
class CDaemon:
'''
a generic daemon class.
usage: subclass the CDaemon class and override the run() method
stderr 表示错误日志文件绝对路径, 收集启动过程中的错误日志
verbose 表示将启动运行过程中的异常错误信息打印到终端,便于调试,建议非调试模式下关闭, 默认为1, 表示开启
save_path 表示守护进程pid文件的绝对路径
'''
def __init__(self, save_path, stdin=os.devnull, stdout=os.devnull, stderr=os.devnull, home_dir='.', umask=22,
verbose=1):
self.stdin = stdin
self.stdout = stdout
self.stderr = stderr
self.pidfile = save_path # pid文件绝对路径
self.home_dir = home_dir
self.verbose = verbose # 调试开关
self.umask = umask
self.daemon_alive = True
'''
编写守护进程的一般步骤步骤:
(1)创建自己成并被init进程接管:在父进程中执行fork并exit退出;
(2)创建新进程组和新会话:在子进程中调用setsid函数创建新的会话;
(3)修改子进程的工作目录:在子进程中调用chdir函数,让根目录 ”/” 成为子进程的工作目录;
(4)修改子进程umask:在子进程中调用umask函数,设置进程的umask为0;
(5)在子进程中关闭任何不需要的文件描述符
在子进程中再次fork一个进程,这个进程称为孙子进程,之后子进程退出
重定向孙子进程的标准输入流、标准输出流、标准错误流到/dev/null
那么最终的孙子进程就称为守护进程。
'''
def daemonize(self):
try:
'''
进程调用fork函数时
python创建守护进程
最新推荐文章于 2021-08-22 11:49:00 发布
本文详细探讨了如何在Python中创建守护进程,包括其概念、使用场景和具体实现方法,帮助开发者理解守护进程在后台运行的重要性及其操作技巧。
摘要由CSDN通过智能技术生成