python创建守护进程

本文详细探讨了如何在Python中创建守护进程,包括其概念、使用场景和具体实现方法,帮助开发者理解守护进程在后台运行的重要性及其操作技巧。
摘要由CSDN通过智能技术生成
#!/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函数时࿰
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值