# -*-coding:utf-8-*-
import sys, os'''将当前进程fork为一个守护进程注意:如果你的守护进程是由inetd启动的,不要这样做!inetd完成了所有需要做的事情,包括重定向标准文件描述符,需要做的事情只有chdir() 和 umask()了
'''
def daemonize(stdin='/dev/null',stdout= '/dev/null', stderr= 'dev/null'):'''Fork当前进程为守护进程,重定向标准文件描述符(默认情况下定向到/dev/null)'''#Perform first fork.try:pid = os.fork()if pid > 0:sys.exit(0)  #first parent outexcept OSError, e:sys.stderr.write("fork #1 failed: (%d) %s\n" %(e.errno, e.strerror))sys.exit(1)#从母体环境脱离os.chdir("/")os.umask(0)os.setsid()#执行第二次forktry:pid = os.fork()if pid > 0:sys.exit(0) #second parent outexcept OSError, e:sys.stderr.write("fork #2 failed: (%d) %s]n" %(e.errno,e.strerror))sys.exit(1)#进程已经是守护进程了,重定向标准文件描述符for f in sys.stdout, sys.stderr: f.flush()si = file(stdin, 'r')so = file(stdout,'a+')se = file(stderr,'a+',0)os.dup2(si.fileno(), sys.stdin.fileno())os.dup2(so.fileno(), sys.stdout.fileno())os.dup2(se.fileno(), sys.stderr.fileno())def _example_main():'''示例函数:每秒打印一个数字和时间戳'''import timesys.stdout.write('Daemon started with pid %d\n' % os.getpid())sys.stdout.write('Daemon stdout output\n')sys.stderr.write('Daemon stderr output\n')c = 0while True:sys.stdout.write('%d: %s\n' %(c, time.ctime()))sys.stdout.flush()c = c+1time.sleep(1)if __name__ == "__main__":daemonize('/dev/null','/home/hzhida/daemon.log','home/hzhida/daemon.log')_example_main()

#第一个fork是为了让shell返回,同时让你完成setsid(从你的控制终端移除,这样就不会意外地收到信号)。setsid使得这个进程成为“会话领导(session leader)”,即如果这个进程打开任何终端,该终端就会成为此进程的控制终端。我们不需要一个守护进程有任何控制终端,所以我们又fork一次。在第二次fork之后,此进程不再是一个“会话领导”,这样它就能打开任何文件(包括终端)且不会意外地再次获得一个控制终端

另外说明:umask()函数为进程设置文件模式创建屏蔽字,并返回以前的值在shell命令行输入:umask 就可知当前文件模式创建屏蔽字常见的几种umask值是002,022和027,002阻止其他用户写你的文件,022阻止同组成员和其他用户写你的文件,027阻止同组成员写你的文件以及其他用户读写或执行你的文件rwx-rwx-rwx  代表是777  所有的人都具有权限读写与执行

chmod()改变文件的权限位int dup(int filedes) 返回新文件描述符一定是当前文件描述符中的最小数值int dup2(int filedes, int filedes2);这两个函数返回的新文件描述符与参数filedes共享同一个文件表项。

转载于:https://www.cnblogs.com/hzhida/archive/2012/08/13/2635639.html

python fork 守护进程相关推荐

  1. python实现守护进程_守护进程原理及Python实现

    守护进程原理及Python实现 守护进程,不依赖于终端,在后台运行的程序,通常称为daemon(ˈdiːmən或ˈdeɪmən). 一些常见的Linux软件通常都是已守护进程的方式运行,比如: ngi ...

  2. 守护进程与后台进程(Python 创建守护进程)

    文章目录 一.守护进程与后台进程 1. 守护进程 1.1 代码实现 为什么要fork两次 umask权限掩码 进程组 会话组 2. 后台进程 3. 守护进程与后台进程区别 4. 使用场景总结 二.参考 ...

  3. python实现守护进程_Python如何实现守护进程的方法示例

    Python如何实现守护进程的方法示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python如何实现守护进程的方法示例.txt ] (友情提示:右键点上行t ...

  4. 怎样利用Python制作守护进程

    有时候我们的需要制作一些守护进程,如果服务器出现了什么问题,就需要重启某个软件啊之类的 那么这类守护进程怎么做呢? 请看代码 import time seconds_to_sleep = 2 * 60 ...

  5. python实现DEAMON守护进程

    1 守护进程 1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端 ...

  6. Python守护进程命令,再也不怕被整蛊了!

    考虑一下利用Python制作一个整蛊.木马软件,我提供思路.(清楚到没学过编程的人也理解) 1.首先一个黑客做一个整蛊或者木马软件,一定不会让你能够关闭它. 2.里面经常会附带欺骗的方法. 3.最终实 ...

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

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

  8. mysql进程daemon_守护进程(Daemon)

    守护进程的概念 守护进程(Daemon)一般是为了保护我们的程序/服务的正常运行,当程序被关闭.异常退出等时再次启动程序/恢复服务. 例如 http 服务的守护进程叫 httpd,mysql 服务的守 ...

  9. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

最新文章

  1. python123动物重量排序_python基本常识
  2. QT的事件分发、事件过滤器详解
  3. OpenCV中的cv::String和CString互相转换
  4. native react 常用指令_React Native入门基础篇(一)
  5. asp.net MVC学习的一些总结
  6. 锁失效_关于bigtable中chubby锁失效时的一点思考
  7. ZeroMQ -- 四种模型简介
  8. Mac 下载并使用 Adobe Audition CC 2019 分离 人物语音和背景音乐
  9. 如何让centos访问windows/ntfs分区
  10. rubyOnRails 开发以及风格指南
  11. adb 驱动 fastboot 驱动 win10
  12. 在线世界地图生成器 pixelmap可调色
  13. beescms网站渗透测试和修复意见
  14. OA系统选型的那些事儿
  15. ES数据的操作(二)
  16. Ubuntu U盘启动盘制作步骤
  17. Word每日一个小技巧:实现方框内点击自动打√[超详细版]
  18. Linux C-学习笔记(一)
  19. android浏览器!6年菜鸟开发面试字节跳动安卓研发岗,大厂面经合集
  20. TASK1_高等数学

热门文章

  1. intellij2018使用2019的主题
  2. 关于对Caffe适用场景的思考
  3. 卷积神经网络VGG16权重数量的计算和理解(转载)
  4. ubuntu没有声音-只有类比立体声输入
  5. 机器学习(十一)——机器学习中的矩阵方法(1)LU分解、QR分解
  6. 螺丝上的十字磨没了_十字起子和无限下拉菜单
  7. 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
  8. myBatis如何返回count(*)得到的int值
  9. Ueditor/自定义配置
  10. Solaris、Mac OS系统日志分析工具