Python daemon守护进程!

[Python]daemon后台守护进程 import os import sys def daemonize(stdin="/dev/null", stdout="/dev/null", stderr="/dev/null"): try: pid = os.fork(); if pid > 0: sys.exit(); #exit the first par 阅读详情

Python daemon 守护进程学习与总结。

守护进程

定义

守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。

特性

  • 在后台运行。
  • 与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。
  • 启动方式特殊,它可以在系统启动时从启动脚本 /etc/rc.d 中启动,可以由 inetd 守护进程启动,可以由 crond 启动,还可以由用户终端(通常是 shell)执行。

总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。

编程规则

  • 在后台运行,调用 fork ,然后使父进程 exit。
  • 脱离控制终端,登录会话和进程组,调用 setsid() 使进程成为会话组长。
  • 禁止进程重新打开控制终端。
  • 关闭打开的文件描述符,调用 fclose()。
  • 将当前工作目录更改为根目录。
  • 重设文件创建掩码为 0。
  • 处理 SIGCHLD 信号。

Python 实现

样例

# coding=utf8
import os
import sys
import atexit
 
def daemonize(pid_file=None):
    """
    创建守护进程
    :param pid_file: 保存进程id的文件
    :return:
    """
    # 从父进程fork一个子进程出来
    pid = os.fork()
    # 子进程的pid一定为0,父进程大于0
    if pid:
        # 退出父进程
        sys.exit(0)
 
    # 子进程默认继承父进程的工作目录,最好是变更到根目录,否则回影响文件系统的卸载
    os.chdir('/')
    # 子进程默认继承父进程的umask(文件权限掩码),重设为0(完全控制),以免影响程序读写文件
    os.umask(0)
    # 让子进程成为新的会话组长和进程组长
    os.setsid()
 
    # 注意了,这里是第2次fork,也就是子进程的子进程,我们把它叫为孙子进程
    _pid = os.fork()
    if _pid:
        # 退出子进程
        sys.exit(0)
 
    # 此时,孙子进程已经是守护进程了,接下来重定向标准输入、输出、错误的描述符(是重定向而不是关闭, 这样可以避免程序在 print 的时候出错)
 
    # 刷新缓冲区先,小心使得万年船
    sys.stdout.flush()
    sys.stderr.flush()
 
    # dup2函数原子化地关闭和复制文件描述符,重定向到/dev/nul,即丢弃所有输入输出
    with open('/dev/null') as read_null, open('/dev/null', 'w') as write_null:
        os.dup2(read_null.fileno(), sys.stdin.fileno())
        os.dup2(write_null.fileno(), sys.stdout.fileno())
        os.dup2(write_null.fileno(), sys.stderr.fileno())
 
    # 写入pid文件
    if pid_file:
        with open(pid_file, 'w+') as f:
            f.write(str(os.getpid()))
        # 注册退出函数,进程异常退出时移除pid文件
        atexit.register(os.remove, pid_file)

开源项目

Github 开源项目: python-daemon 提供了 Python 版本的守护进程化实现。提供了以下方法:

  • start() - starts the daemon (creates PID and daemonizes).
  • stop() - stops the daemon (stops the child process and removes the PID).
  • restart() - does stop() then start() .

直接继承 Daemon 类即可,使用示例:

from daemon import Daemon
class pantalaimon(Daemon):
    def run(self):
        # Do stuff
# 指定 pid 文件的路径
pineMarten = pantalaimon('/path/to/pid.pid')
pineMarten.start()
python后台daemon运行 想要Python脚本以daemon运行,有两种方案:①crotab②自己编写守护进程daemon,但比较麻烦。 阅读详情

相关推荐

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

UNIX环境高级编程 第13章 守护进程

守护进程daemon是一种生存周期很长的进程。它们通常在系统引导时启动,在系统关闭时终止。守护进程是没有终端的,它们一直在后台运行。 守护进程的特征 在Linux系统中,可以通过命令 ps -efj 来查看守护进程。例如下图: 从上图中可以看到 TTY 一列,该列显示每个进程的终端,对于问号(?)显示的进程,表明该进程没有控制终端。而CMD列中方括号[ ]显示的进程表明这是一个内核...

weixin_30622181的博客 174

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1291

python守护进程_python实现的守护进程(Daemon)

python实现的守护进程(Daemon)def createDaemon():”’Funzione che crea un demone per eseguire un determinato programma…”’import os# create - fork 1try:if os.fork() > 0: os._exit(0) # exit father…except OSErro...

weixin_34725044的博客 524

魔兽世界怀旧服宏命令全解析:从自动换装到智能判定,老玩家才知道的黑科技

本文全面解析魔兽世界怀旧服宏命令的高级应用,从自动换装到智能判定,揭秘老玩家专属的黑科技技巧。深入探讨怀旧服特有的宏命令机制,包括施法队列、装备切换系统和职业专属技巧,帮助玩家在经典旧世版本中提升战斗效率。

weixin_29230865的博客 725

动态规划法:n*m方格前进问题

在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照正前方相临的五个方向(方格)前进但不能越出方格。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出和的最大值。 算法设计: 可以使用动态规划方法,从顶部开始,将第二排的每个数加上顶部第一排的最优解,将6排的问题缩小为5排的问题,然后重复该操作,直到底部最后一排,此时

Winifred_1997的博客 4675

Python多线程(三)——daemon属性

【代码】Python多线程(三)——daemon属性。

重邮皮皮尛的博客 4038

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 410

python-线程和进程的区别

壹.线程定义: 1.线程是操作系统中能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 2.一个线程指的是进程中一个单一顺序的控制流。 3.一个进程中可以并发多条线程,每条线程并行执行不同的任务。 贰.进程定义: 1,程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。 2,数据集:数据集则是程序在执行过程中需要的资源,比如图片、音视频、文件等。 3,进程控制块:进程控制块是用来记录进程的外部特征,描述进程的执行变化过程,系统可以用它来控制和管理进程,它是系统感知进程存在的唯一

weixin_46837674的博客 877

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2566

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9808

关于python脚本以linux守护进程(daemon)运行

linux守护进程及其特性 守护进程最重要的特性是后台执行。 在这一点上DOS下的常驻内存程序TSR与之类似。其次,守护进程必须与其执行前的环境隔离开来。这些环境包含未关闭的文件描写叙述符。控制终端。会话和进程组,工作文件夹以及文件创建掩模等。 linux守护进程与普通进程的区别 默认情况下,进程是在前台运行的,这时就把shell占据了(有很多日志打印输出),我们无法进行其他操作。所以对于没有交...

chenbogger的博客 3558

Transformer实战(30)——Transformer注意力机制可视化

在本节中,我们讨论了人工智能面临的最重要问题之一:可解释人工智能 (explainable artificial intelligence, XAI)。随着语言模型的不断发展,可解释性成为一个严峻的问题。本节中,我们从 Transformer 的角度出发,研究了 Transformer 架构中的自注意力机制,尝试通过各种可视化工具理解这些机制的内部过程。

盼小辉丶的博客 2620

python对于守护进程join , 以及daemon 的使用条件

python中对于守护进程join , 以及daemon 的使用条件

几许的博客 1124

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python daemon守护进程

守护进程 定义 守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。 特性 在后台运行。 与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。 启动方式特殊,它可以在系统启动...

python学习者的博客 1004

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python守护进程 daemon

守护进程的作用是,我们在linux下运行python程序很多都是在命令行终端中运行的,而通过这样运行的服务其实会变成终端程序的一个子进程。如果ctrl+c退出或者关闭终端,那么服务端程序就会退出。于是就想着让这个服务端程序成为守护进程,像httpd、vsftpd、mysqld一样,一直在后端运行,不会受终端的影响。 对于个人来说这种情况也可以通过tmux来解决 守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触...

hxxjxw的博客 2738

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python守护进程_python daemon守护进程实现

假如写一段服务端程序,如果ctrl+c退出或者关闭终端,那么服务端程序就会退出,于是就想着让这个程序成为守护进程,像httpd一样,一直在后端运行,不会受终端影响。守护进程英文为daemon,像httpd,mysqld,最后一个字母d其实就是表示daemon的意思。守护进程的编写步骤:1、fork子进程,然后父进程退出,此时子进程会被init进程接管。2、修改子进程的工作目录,创建新进程组合新会话...

weixin_39612499的博客 150

python daemon 守护进程

import sys, os def main(): """ A demo daemon main routine, write a datestamp to /tmp/daemon-log every 10 seconds. """ import time f = open("/tmp/daemon-log", "w")

空空的世界 1万+

Python实现守护进程Daemon

Daemon 守护进程 概述 系统为了某些功能必须要提供一些服务,但服务的提供总是需要进程的运行,实现这个服务的程序我们就称之为daemon。 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 用户使守护进程独立于所有终端。因为在守护进程从一个终端启动的...

7B_Geek的博客 2141

PHP-Daemon vs 其他方案:何时选择PHP守护进程方案

PHP-Daemon是一个能够帮助开发者使用PHP 5.3+构建生产级守护进程的工具,它可以让你无需编写大量样板代码就能创建容错应用。在服务器端开发中,选择合适的守护进程方案至关重要,不同的技术栈各有其优势和适用场景。 ## 🚀 PHP-Daemon的核心优势 PHP-Daemon最大的特点是**降低了PHP开发守护进程的门槛**。传统PHP开发主要面向Web请求,而构建长期运行的后台服务需

gitblog_01154的博客 356

python守护进程_python实现的守护进程(Daemon)的代码

将开发过程经常用的一些代码段记录起来,下边代码段是关于python实现的守护进程(Daemon)的代码,希望对小伙伴有一些用。def createDaemon():”’Funzione che crea un demone per eseguire un determinato programma…”’import os# create - fork 1try:if os.fork() > ...

weixin_39572168的博客 118

Python守护进程daemon实现

1 守护进程 1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。 在这里,我们在Linux2.6内核的centos中,ps -ef |awk '{print $1"\t "$2"\t "$3"

翟海飞 2万+

如何使python脚本运行在daemon模式

有一个很好的库可以完成这一功能,可惜因为文档少所以网上例子不太多库名:python-daemon可以通过Pip来安装最简单的使用方式import daemon with daemon.DaemonContext(): print "your code"当然代码块中最好放一个长时间执行并写日志到某个路径的代码,方便观察代码的执行情况简单但是缺乏必要的控制,比如 如果我们想保证无论多次执行程

sdcxyz的专栏 7732

python3 守护进程daemon

# coding:utf-8 import os import time from multiprocessing import Process def func(): print("子进程开始.") time.sleep(2) print("子进程结束.") if __name__ == '__main__': p ...

ddxr5515的博客 1578

python守护进程_Python守护进程用法实例分析

本文实例讲述了Python守护进程用法。分享给大家供大家参考。具体分析如下:守护进程是可以一直运行而不阻塞主程序退出。要标志一个守护进程,可以将Process实例的daemon属性设置为True。代码如下:import osimport timeimport randomimport sysfrom multiprocessing import Process,current_processdef...

weixin_39890289的博客 528

python实现守护进程_python中的daemon守护进程实现方法

#!/usr/bin/env python#encoding: utf-8#description: 一个守护进程的简单包装类, 具备常用的start|stop|restart|status功能, 使用方便# 需要改造为守护进程的程序只需要重写基类的run函数就可以了#date:2015-10-29#usage: 启动: python daemon_class.py sta...

weixin_39619170的博客 692
上一篇: Python基础 ,快速实现命令行参数解析!
下一篇: scrapy爬取云沃客项目外包网数据!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值