返回顶部
首页 > 资讯 > 后端开发 > Python >Python创建daemon
  • 871
分享到

Python创建daemon

Pythondaemon 2023-01-31 07:01:51 871人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

    参考《linux/Unix 系统编程手册》    变成daemon,一个程序需要完成以下步骤:    1、执行一个fork(),父进程退出,子进程继续执行。(daemon成为了init进程的子进程)      --假设daemon是

    参考《linux/Unix 系统编程手册》

    变成daemon,一个程序需要完成以下步骤:

    1、执行一个fork(),父进程退出,子进程继续执行。(daemon成为了init进程的子进程)  

    --假设daemon是从命令行启动,父进程的终止会被shell发现,之后shell会显示出另一个shell提示符并让子进程在后台运行;

    --子进程被确保不会成为一个进程组的首进程(它从父进程继承了进程组ID,并拥有了自己唯一的进程ID,该进程ID与继承来的进程组ID是不同的,这样才能成功执行下面一个步骤)

    2、子进程调用setsid()开启一个新会话并释放它与控制终端之间的所有关联;

    3、对于终端设备的处理:

    --daemon从未打开过终端设备,不需做任何处理;

    --daemon后面可能会打开一个终端设备,必须采取措施确保该设备不会成为控制终端,具体措施:

      1、在所有可能应用到一个终端设备上的open() 调用中指定O_NOCTTY标记;

      2、在setsid()调用之后执行第二个fork(),再次让父进程退出并让孙子进程继续执行,(这样确保了子进程不会成为会话组长,进程永远不会重新请求一个控制终端--根据SystemV中获取终端规则)

    4、清除进程的umask(确保daemon创建文件和目录时拥有必要的权限)

    5、修改进程当前工作目录(通常改为根目录 /,保证根目录的文件系统不会被卸载即可,如:cron会将自身放在/var/spool/cron 目录下)

    6、关闭daemon从父进程继承而来的所有打开着的文件描述符(由于daemon失去了控制终端,对0,1,2描述符完全可以关闭;无法卸载长时间运行的daemon打开的文件所在的文件系统----文件描述符是一种有限资源)

    7、关闭0,1,2文件描述符后,daemon通常会打开/dev/null,并让所有描述符都指向该设备

    --这样确保了当daemon调用在这些文件描述符上执行io的库函数时不会出乎意料的失败;

实例:

import sys,os,time

def main():
    """ A demo daemon main routine, write a datestamp to /tmp/daemon-log every 10 seconds."""

    f = open("/tmp/daemon-log", "w") 
    while 1: 
        f.write('%s/n' % time.ctime(time.time())) 
        f.flush() 
        time.sleep(10) 

if __name__ == "__main__":
    # do the UNIX double-fork magic
    try: 
        pid = os.fork() 
        if pid > 0:
            # exit first parent
            sys.exit(0) 
    except OSError, e: 
        print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) 
        sys.exit(1)

    # decouple from parent environment
    os.chdir("/") 
    os.setsid() 
    os.umask(0) 

    # do second fork
    try: 
        pid = os.fork() 
        if pid > 0:
            # exit from second parent, print eventual PID before
            print "Daemon PID %d" % pid 
            sys.exit(0) 
    except OSError, e: 
        print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) 
        sys.exit(1) 
		
    # start the daemon main loop
    main()


--结束END--

本文标题: Python创建daemon

本文链接: https://lsjlt.com/news/191368.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python创建daemon
        参考《Linux/Unix 系统编程手册》    变成daemon,一个程序需要完成以下步骤:    1、执行一个fork(),父进程退出,子进程继续执行。(daemon成为了init进程的子进程)      --假设daemon是...
    99+
    2023-01-31
    Python daemon
  • python 守护进程(daemon)
    守护进程的编写步骤: 1、fork子进程,然后父进程退出,此时子进程会被init进程接管。 2、修改子进程的工作目录,创建新进程组合新会话,修改umask。 3、子进程再次fork一个进程,这个进程可以称为孙子进程,然后子进程退出。 4、重...
    99+
    2023-01-31
    进程 python daemon
  • python daemon守护进程实现
    假如写一段服务端程序,如果ctrl+c退出或者关闭终端,那么服务端程序就会退出,于是就想着让这个程序成为守护进程,像httpd一样,一直在后端运行,不会受终端影响。 守护进程英文为daemon,像httpd...
    99+
    2022-06-04
    进程 python daemon
  • Python实现Daemon(守护)进程
    最近在写Daemon进程,在编写过程中遇到一些小麻烦,最终还是解决了。 我编写了两种,第一种是编写了一个程序,将其用setsid命令让其放入后台运行,第二种是直接fork()一个进程,在代码里将进程设置为后台启动。 在os.sytem()...
    99+
    2023-01-31
    进程 Python Daemon
  • Python守护进程daemon实现
    1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息...
    99+
    2023-01-31
    进程 Python daemon
  • python-daemon日志记录的一个
    最近用到了python-daemon这个库来使一个进程成为daemon进程,代码大致如下: #!env python #coding=utf-8 import logging import multiprocessing impo...
    99+
    2023-01-31
    日志 python daemon
  • python中的daemon守护进程实现
    守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。 ...
    99+
    2023-01-31
    进程 python daemon
  • 如何使python脚本运行在daemon
    有一个很好的库可以完成这一功能,可惜因为文档少所以网上例子不太多库名:python-daemon可以通过Pip来安装最简单的使用方式import daemon with daemon.DaemonContext(): print...
    99+
    2023-01-31
    脚本 python daemon
  • python如何创建堆
    小编给大家分享一下python如何创建堆,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、说明创建堆有两种基本方法:heappush() 和 heapify()。当使用heappush()时,当新元素添加时,堆得顺序被保持...
    99+
    2023-06-14
  • IDEA 创建 python 项目
    工具:IDEA 2023 一、安装插件 安装 python 插件 新建python项目 其中的Environment type 选择 virtualenv ,表示为这个项目创建一个虚拟Python虚...
    99+
    2023-09-23
    intellij-idea python java 第一个python项目 创建项目
  • python创建txt文件
    1.自己写入txt直接上核心代码:with open("douban.txt","w") as f:         f.write("这是个测试!")1212这句话自带文件关闭功能,所以和那些先open再write再close的方式来说,...
    99+
    2023-01-31
    文件 python txt
  • python 创建PDF文件
    1.安装reportlab库 http://www.reportlab.com/ftp/ ubuntu可以直接 apt-get install python-reportlab 2.实验   >>> from report...
    99+
    2023-01-31
    文件 python PDF
  • idea创建python工程
    创建Python工程        在idea里面,File->new projects  ,在弹出的工程界面,选择sdk 然后一路next下去, 选择路径   3) 在python 工程中添加module 在自己的python...
    99+
    2023-01-31
    工程 idea python
  • python怎么创建新文件(python怎么创建文件代码)
    文章目录 前言1. 使用内置的open函数2. 使用with关键字3. 使用os模块 总结零基础Python学习资源介绍👉Python学习路线汇总👈...
    99+
    2023-10-20
    python microsoft java 新建python文件
  • 为Python创建扩展,使python能
    在架构服务器的时候,使用了IOCP来收发数据,使用Python写解包入库程序,那么要让两个进程通信,有很多方法,这里使用了内存共享的方法 python本来没有内存共享(我没有找到,也不知道是不是真的没有,但是和C++的程序共享内存,我想确实...
    99+
    2023-01-31
    Python python
  • python如何创建属性
    这篇文章将为大家详细讲解有关python如何创建属性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。创建属性的两种方式(1)返回 property 属性,典型的用法:cla...
    99+
    2024-04-02
  • python怎么创建mysql表
    python创建mysql表的方法:打开cmd命令行,输入:“pip install -i https://mirrors.aliyun.com/pypi/simple/ pymysql”。再打开pycharm编写代码:# -*-...
    99+
    2024-04-02
  • Python怎么创建画布
    在Python中,你可以使用`Matplotlib`库来创建画布。下面是一个简单的示例代码,展示了如何创建一个空白的画布:```py...
    99+
    2023-09-20
    python
  • Python 创建二维数组
    文章目录 一. 创建二维数组遇到的问题1. 列表能创建多维数组? 二. 解决:使用列表创建一个二维数组,可以使用生成器来辅助实现三. 解决:相比 List,NumPy 数组的优势1. ...
    99+
    2023-09-22
    python numpy 开发语言
  • Python创建数字列表
    【一】range()函数 在python中可以使用range()函数来产生一系列数字 for w in range(1,11): print(w) 输出: 1 2 3 4 5 6 7 8 9 10 #注意:这里的到10就结束了,不...
    99+
    2023-01-31
    数字 列表 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作