python 创建守护进程

  • python 的os.setdid()提供了类似linux c api的 setsid
  • 也可以通过unix双fork创建守护进程。

    几个相关的函数

  1. os.umask(0) #重设文件创建掩码,子进程会从父进程继承所有权限,可以通过调用这个方法将文件创建掩码初始化成系统默认。
  2. os.setsid() #调用系统的setsid(),创建一个新的会话并创建组id
  1. #!/usr/bin/env python
  2. #coding:utf8
  3. import sys, os
  4. def main():
  5. """ A demo daemon main routine, write a datestamp to
  6. /tmp/daemon-log every 10 seconds.
  7. """
  8. import time
  9. f = open("/tmp/daemon-log", "w")
  10. while 1:
  11. f.write('%s/n' % time.ctime(time.time()))
  12. f.flush()
  13. time.sleep(10)
  14. if __name__ == "__main__":
  15. # do the UNIX double-fork magic, see Stevens' "Advanced
  16. # Programming in the UNIX Environment" for details (ISBN 0201563177)
  17. try:
  18. pid = os.fork()
  19. if pid > 0:
  20. # exit first parent
  21. sys.exit(0)
  22. except OSError, e:
  23. print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
  24. sys.exit(1)
  25. # decouple from parent environment
  26. os.chdir("/")
  27. os.setsid()
  28. os.umask(0)
  29. # do second fork
  30. try:
  31. pid = os.fork()
  32. if pid > 0:
  33. # exit from second parent, print eventual PID before
  34. print "Daemon PID %d" % pid
  35. sys.exit(0)
  36. except OSError, e:
  37. print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
  38. sys.exit(1)
  39. # start the daemon main loop
  40. main()

  

  1. 代码引用自从:http://code.activestate.com/recipes/66012/download/1/
  1. main为写时间戳的永久循环
  2. 运行后程序fork一个进程,如果fork成功则程序自己退出
  3. 通过setsid() 创建了一个独立于当前会话的进程
  4. 再一次fork一个进程,如果fork成功则当前程序退出
  5. 这时候进程的父进程就变成了 init,成为了一个独立的deamon

Python中创建守护进程的更多相关文章

  1. ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

    前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程 ...

  2. ASP.ENT Core Linux 下 为 donet创建守护进程(转载)

    原文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html 前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 ...

  3. Supervisor 为服务创建守护进程

    今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...

  4. linux 创建守护进程的相关知识

    linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...

  5. python学习笔记——守护进程

    1 基本描述 守护进程:是系统中独立的后台服务进程, 特点:独立与终端并且周期性地执行某个任务,其生命周期长,一般随系统启动和终止. 缺点:进程的创建和销毁的时候需要消耗较多的计算机资源. 2 参考 ...

  6. Python 中线程和进程

    目录 线程和进程 一. 什么是进程 / 线程 1. 引论 2. 线程 3. 进程 4. 区别 5. 使用 二. 多线程使用 1. 常用方法 2. 常用参数 3. 多线程的应用 3.1 重写线程法 3. ...

  7. 创建守护进程步骤与setsid() -- linux deamon进程

    原创:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且 ...

  8. linux创建守护进程

    守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...

  9. 操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁

    并发编程前言: 1.网络应用 1)爬虫 直接应用并发编程: 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2.运维领域 1)自动 ...

随机推荐

  1. shell 命令之 jps

    中华石衫老师说过,java是一个生态,几乎所有框架都对java 有很好的支持. 正是这句话,让我坚定了持续学习java的信念. 说回jps,jps是java 提供的,功能等于 ps -ef | gre ...

  2. 数据统计--union all 执行多条sql

    需求--统计hive某张表type字段不同取值的数据量 我们已知某张表的type的取值是1,2,3,4,5,想要统计不同type的数据量,并清晰的展现出来.可以通过union all 的方式,sql如 ...

  3. Python自动化开发 - Django【进阶篇】

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  4. lnmp mysql添加用户命令

    cd /usr/local/mysql/bin/grant all privileges on *.* to 'root'@'%' identified by '12345678';flush pri ...

  5. VBA 代码

    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA& ...

  6. windows下安装ubuntu

    在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...

  7. Rabbit MQ 入门指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  8. 【Win】Clso QR Tool 二维码小工具

    一个可以生成并识别二维码的windows小工具,纯绿色.不含糖. 可以通过输入文本生成二维码,或者加载本地图片.剪贴板内的图片,直接解析出二维码内容. 支持自定义LOGO. 下载文件 (当前版本:1. ...

  9. C++获取系统信息(IP地址、硬件信息等)

    #include<stdio.h> #include<winsock2.h> //该头文件需在windows.h之前 #include<windows.h> #in ...

  10. 连接dubbox注册中心的端口默认是20880

    pyg服务工程  都没用到20880 都没用默认,从20881 开始用,第二个服务工程 的则为20882 <dubbo:protocol name="dubbo" port= ...