首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Python守护进程daemon实现

6、某些守护进程可以打开/dev/null使其具有文件描述符0、1、2,这使任何一个试图读标准输入、写标准输出或标准错误库例程都不会产生任何效果。...总结守护进程编程规则 1.在后台运行,调用fork ,然后使父进程exit 2.脱离控制终端,登录会话和进程组,调用setsid()使进程成为会话组长 3.禁止进程重新打开控制终端 4.关闭打开文件描述符...os.setsid() '''防止在类似于临时挂载文件系统下运行,例如/mnt文件夹下,这样守护进程一旦运行,临时挂载文件系统就无法卸载了,这里我们推荐把当前工作目录切换到根目录下''' os.chdir...("/") '''设置用户创建文件默认权限,设置是权限“补码”,这里将文件权限掩码设为0,使得用户创建文件具有最大权限。..._exit(1) # 孙进程 # for i in range(3,64): # 关闭所有可能打开不需要文件,UNP中这样处理,但是发现在python中实现不需要。

7.2K30

利用python socket管理服务器

,不要使默认文件和目录具有全权而设 def createDaemon():     #脱离父进程     try:         pid = os.fork()         if pid >..._exit(0)     except OSError,error:         print "fork #1 failed: %d (%s)" % (error.errno, error.strerror..._exit(1)     #修改当前工作目录     os.chdir('/')     #脱离终端     os.setsid()     #重设文件创建权限     os.umask(0)     ...#第二次创建进程,禁止进程重新打开终端文件     try:         pid = os.fork()         if pid > 0:             print 'Daemon ...#第二次创建进程,禁止进程重新打开终端文件     try:         pid = os.fork()         if pid > 0:             print 'Daemon

90920

Python创建daemon

()开启一个新会话并释放它与控制终端之间所有关联;     3、对于终端设备处理:     --daemon从未打开过终端设备,不需做任何处理;     --daemon后面可能会打开一个终端设备,...创建文件和目录时拥有必要权限)     5、修改进程当前工作目录(通常改为根目录 /,保证根目录文件系统不会被卸载即可,如:cron会将自身放在/var/spool/cron 目录下)     6、...关闭daemon从父进程继承而来所有打开文件描述符(由于daemon失去了控制终端,对0,1,2描述符完全可以关闭;无法卸载长时间运行daemon打开文件所在文件系统----文件描述符是一种有限资源...)     7、关闭0,1,2文件描述符后,daemon通常会打开/dev/null,并让所有描述符都指向该设备     --这样确保了当daemon调用在这些文件描述符上执行IO库函数时不会出乎意料失败...)     # decouple from parent environment     os.chdir("/")      os.setsid()      os.umask(0)      #

75110

Python模块整理(六):守护进程

退出父进程,第二个特性:与启动它进程脱离             sys.exit(0)     except OSError,e:         sys.stderr.write("fork...os.umask(0)    #修改文件模式,让进程有最大权限,保证进程有读写执行权限,这个不是一个好方法。    ...try:         pid=os.fork()         if pid>0:             sys.exit(0)     except OSError,e:        ...子进程跳过if语句,通过os.setsid()成为linux中独立于终端进程(不响应sigint,sighup等)。 第二次os.fork再创建一个子进程,自己自杀。...原因是os.setsid()后成为父进程,虽然已经不被动响应信号,但访问终端文件时控制权还是会失去。这次创建进程真的是孤魂野鬼daemon,并且外界对它影响被控制在最小。

65410

Python 守护进程

如果你认为有可能有打开文件描     述符,你需要关闭它们,因为系统有一个同时打开文件限制。 7. 为标准输入,标准输出和标准错误输出建立新文件描述符。...准确操作这些描述符是基于各自     爱好;比如说,如果你有一个日志文件,你可能希望把它作为标准输出和标     准错误输出打开,而把‘/dev/null’作为标准输入打开;作为替代方法...except OSError, e:         sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))...except OSError, e:         sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))...了个遍,最后结论是这样:   父进程执行代码到os.fork()处时,会将自己整个拷贝一份(即子进程)这时候父进程os.fork()返回值大于零(即子进程PID),子进程os.fork()

91130

python中daemon守护进程实现方法

守护进程特性 1.在后台运行 2.与其运行前环境隔离开来。这些环境包括未关闭文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。...守护进程编程规则 1.在后台运行,调用fork ,然后使父进程exit 2.脱离控制终端,登录会话和进程组,调用setsid()使进程成为会话组长 3.禁止进程重新打开控制终端 4.关闭打开文件描述符...6.重设文件创建掩码为0 7.处理SIGCHLD 信号 下面是一个demo源码示例: #!...('fork #1 failed: %d (%s)\n' % (e.errno, e.strerror))             sys.exit(1)         os.chdir(self.home_dir...产生日志文件为 ? 产生日志文件为 参考文档 http://zhidao.baidu.com/link?

74820

python 守护进程(daemon)

#1 failed: (%d) %s\n" % (e.errno, e.strerror))         sys.exit(1)         # 从母体环境脱离       os.chdir(...也可以改变到对于守护程序运行重要文件所在目录       os.umask(0)  # 调用umask(0)以便拥有对于写任何东西完全控制,因为有时不知道继承了什么样umask。       ...       except OSError, e:         sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror...(), sys.stdin.fileno())  # dup2函数原子化关闭和复制文件描述符       os.dup2(so.fileno(), sys.stdout.fileno())     os.dup2...4.修改umask 由于umask会屏蔽权限,所有设定为0,这样可以避免读写文件时碰到权限问题 5.fork孙子进程,子进程退出 经过上面几个步骤后,子进程会成为新进程组老大,可以重新申请打开终端,为了避免这个问题

1K30

Python内置OS模块用法详解

仅当这文件夹是空才可以, 否则, 抛出OSError。语法格式如下 os.rmdir(path) path – 要删除目录路径 removedirs() 方法用于递归删除目录。...注意如果目录不为空,会抛出OSError:[Errno 66] Directory not empty.语法格式为 os.removedirs(path) 示例代码 import os os.rmdir...02test/Python/02 进阶部分")) # False 重命名目录 rename() 方法用于命名文件或目录,从 src 到 dst,如果dst是一个存在目录, 将抛出OSError。...os.open() 方法用于打开一个文件,并且设置需要打开选项,模式参数mode参数是可选,默认为 0777。...", os.O_CREAT | os.O_RDWR) # 打开文件 os.write(file, b"This is test") # 写入内容 os.fsync(file) # 将字符串刷新到硬盘上

98320

100行代码实现任务队列

| os.O_EXCL | os.O_WRONLY# 为了防止任务太多需要生成过多线程,我们使用Queue 来限制生成线程数量WORKER_NUMS = 2q = Queue.Queue(WORKER_NUMS...)lock = RLock()def check_file(): try: file_handle = os.open(tasks_file, flags) except OSError...as e: if e.errno == errno.EEXIST: # Failed as the file already exists....读取任务时,计算当前 index和cycle_num, 取出需要执行任务,使用多线程形式执行。 为了防止任务太多需要生成过多线程,我们使用Queue 来限制生成线程数量。...加锁主要作用是防止多线程同时操作文件读写,影响数据一致性。 当然,也可以使用redis 存储队列,因为 redis 是单线程操作,可以防止多线程操作影响数据一致性问题。

41220

python调用外部命令

python调用外部命令 os.system:  输出在终端上,捕捉不到 os.popen:  只能捕捉到标准输出,捕捉不到标准错误输出 os.popen2: 返回2个对象,一个是标准输入,一个是标准输出...os.popen3: 返回3个对象,标准输入,标准输出,标准错误输出 os.popen4: 返回2个对象,pip_in 和pip_out_err os.system:  输出在终端上,捕捉不到 In ...: [Errno 2] No such file or directory     In [10]: subprocess.call(['ls -l'])  #会把-l当成一个文件,找不到该文件 OSError...: [Errno 2] No such file or directory       In [49]: subprocess.call(['ls -l'],shell = True)  #默认shell... 05:57 hashlib2.py drwxr-xr-x 2 root root    4096 10月 24 06:03 test -rw-r--r-- 1 root root     556 12

1.2K10

Python和sendfile

sendfile(2)是UNIX系统调用,它提供“零复制”方式将数据从一个文件描述符(一个文件)复制到另一个文件描述符(一个套接字)。...关于sendfile(2)工作原理更详尽解释可以在这里找到 ,但是长话短说,使用sendfile()发送文件通常比使用普通socket.send() 快两倍 。...socket.sendfile()将一直传输文件,直到尝试通过使用os.sendfile()达到EOF 为止(如果可用),否则将使用普通socket.send()退回。...在内部,它负责处理套接字超时,并提供两个可选参数来移动文件偏移或仅发送有限数量字节。 我想出了这个主意,是因为要正确地使用所有这些技巧有些棘手,因此使用通用包装器似乎很方便。...(sockno, fileno, offset, blocksize) except OSError as err: if err.errno

66910
领券