首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python守护进程daemon实现

这些环境包括未关闭文件描述符,控制终端,会话和进程组,工作目录以及文件创建屏蔽字等。这些环境通常是守护进程从执行它进程(特别是shell)中继承下来。...1.2 守护进程特性 1.在后台运行 2.与其运行前环境隔离开来。这些环境包括未关闭文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。...这是为了保证守护进程的当前工作目录在一个挂载文件系统中,该文件系统不能被卸载。 5、关闭不再需要文件描述符。根据具体情况来定。...6、某些守护进程可以打开/dev/null使其具有文件描述符0、1、2,这使任何一个试图读标准输入、写标准输出或标准错误库例程都不会产生任何效果。...8、用日志系统记录出错信息    因为守护进程没有控制终端,当进程出现错误时无法写入到标准输出上,可以通过调用syslog将出错信息写入到指定文件中。

7K30

python 守护进程(daemon)

3、子进程再次fork一个进程,这个进程可以称为孙子进程,然后子进程退出。 4、重定向孙子进程标准输入流,标准输出流,标准错误到/dev/null #!...inetd完成了    所有需要做事情,包括重定向标准文件描述符,需要做事情只有chdir()和umask()了 ''' def daemon(stdin='/dev/null', stdout=...       except 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...,fork孙子进程处理, 6.重定向孙子进程标准输入流,标准输出流,标准错误流到/dev/null 因为是守护进程,本身已经脱离了终端,那么标准输入流,标准输入流,标准错误流就没有什么意义了,所以都转向到

1K30
您找到你想要的搜索结果了吗?
是的
没有找到

python中daemon守护进程实现方法

守护进程特性 1.在后台运行 2.与其运行前环境隔离开来。这些环境包括未关闭文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。...守护进程编程规则 1.在后台运行,调用fork ,然后使父进程exit 2.脱离控制终端,登录会话和进程组,调用setsid()使进程成为会话组长 3.禁止进程重新打开控制终端 4.关闭打开文件描述符...usage: subclass the CDaemon class and override the run() method     stderr  表示错误日志文件绝对路径, 收集启动过程中错误日志...    verbose 表示将启动运行过程中异常错误信息打印到终端,便于调试,建议非调试模式下关闭, 默认为1, 表示开启     save_path 表示守护进程pid文件绝对路径    .../daemon_class.pid' #守护进程pid文件绝对路径     log_fn = '/tmp/daemon_class.log' #守护进程日志文件绝对路径     err_fn =

73620

Python 守护进程

调用‘close()’关闭文件描述符0,1和2。这样我们释放了从父进程继承标     准输入,标准输出,和标准错误输出。...如果你认为有可能有打开文件描     述符,你需要关闭它们,因为系统有一个同时打开文件限制。 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))

90330

Python创建daemon

(daemon成为了init进程进程)       --假设daemon是从命令行启动,父进程终止会被shell发现,之后shell会显示出另一个shell提示符并让子进程在后台运行;     -...-子进程被确保不会成为一个进程进程(它从父进程继承了进程组ID,并拥有了自己唯一进程ID,该进程ID与继承来进程组ID是不同,这样才能成功执行下面一个步骤)     2、子进程调用setsid...创建文件和目录时拥有必要权限)     5、修改进程当前工作目录(通常改为根目录 /,保证根目录文件系统不会被卸载即可,如:cron会将自身放在/var/spool/cron 目录下)     6、...关闭daemon从父进程继承而来所有打开着文件描述符(由于daemon失去了控制终端,对0,1,2描述符完全可以关闭;无法卸载长时间运行daemon打开文件所在文件系统----文件描述符是一种有限资源...)     7、关闭0,1,2文件描述符后,daemon通常会打开/dev/null,并让所有描述符都指向该设备     --这样确保了当daemon调用在这些文件描述符上执行IO库函数时不会出乎意料失败

74410

《理解 Unix 进程》笔记-1

无论何时在进程中打开一个资源,你都会获得一个文件描述符编号(file description number)。文件描述符并不会在无关进程之间共享,它只存在于其所属进程之中。 #!...打开多个资源所分配文件描述符编号是尚未使用最小数值。 资源一旦关闭,对应文件描述符编号就会释放又能继续使用了。 文件描述符只是用来跟踪打开资源,已经关闭资源是没有文件描述符。...()) 输出: 0 1 2 进程皆有资源限制 文件描述符代表已打开资源,当资源没有被关闭时候,文件描述符编号会一直递增,那一个进程可以拥有多少个文件描述符呢?...,里边有两个元素,第一个元素是文件描述符软限制,第二个是文件描述符硬限制。...子进程拥有自己唯一 pid 子进程ppid 就是调用 fork 进程 pid fork 调用时,子进程从父进程处继承了所有的文件描述符,也获得了父进程所有的文件描述符编号。

86910

解决No module named fcntl

这个错误通常是由于在使用Python标准库中fcntl模块时出现。什么是fcntl模块fcntl模块是Python标准库之一,它提供了对文件描述符进行控制功能。...该模块提供了对文件描述符非阻塞I/O、锁定、信号处理等操作。...然后使用fcntl模块fcntl函数和F_SETFL参数将文件描述符标志位设置为非阻塞模式。接下来,我们尝试读取文件内容。...通过将文件描述符设置为非阻塞模式,可以确保I/O操作不会阻塞程序执行。当需要进行非阻塞读取时,如果没有数据可用,read操作会立即返回并抛出OSError或BlockingIOError异常。...锁定在实际应用中经常用于解决临界区问题,确保多个线程或进程之间互斥执行,避免竞争和数据错误。信号处理信号是计算机系统中用于通知进程发生了某个事件一种机制。

86230

Python实现守护进程

概念 守护进程(Daemon)也称为精灵进程是一种生存期较长一种进程。它们独立于控制终端并且周期性执行某种任务或等待处理某些发生事件。他们常常在系统引导装入时启动,在系统关闭时终止。...unix系统有很多守护进程,大多数服务器都是用守护进程实现,例如inetd守护进程。...需要了解相关概念 进程 (process) 进程组 (process group) 会话 (session) 可参考以下博文 Linux进程基础 Linux进程关系 实现原理 参考 APUE关于守护进程章节...禁止进程重新打开控制终端 二次fork,创建子-孙进程,使sid不等pid 关闭打开文件描述符 通常就关闭STDIN、STDOUT和STDERR 改变当前工作目录 防止占用别的路径...打开一个控制终端条件是该进程必须是session leader。

1.2K20

Linux文件IO函数

在Linux下当一个进程打开文件时候,OS会返回相应文件描述符,程序为了处理该文件必须使用这个文件描述符。...文件描述符是一个正整数。一般而言,当一个进程启动时候,他会打开3个文件:标准输入,标准输出,标准错误。...mode值包含了对文件访问权限位。正如上面描述一样,每个文件9个访问权限位,并且可以分为3组。...如果返回了-1,表示出错,我们还可以由perror函数知道出现错误具体是什么。 当Linux系统函数出错时候,一般会返回一个负值给errno。POSIX和ISO C将errno定义为一个符号。...perror函数首先输出参数s内容,然后是一个冒号,一个空格,接着输出errno所对应出错消息。然后换行。 read函数 ? fd是文件描述符;buf是缓冲区,用于保存从文件中读取内容。

1.6K70

【Linux】Linux文件IO常规操作

在 Linux 中,文件被视为一系列字节有序集合,每个文件都有一个相关联文件描述符,用于标识该文件唯一标识符。文件 IO 操作允许程序从文件读取数据或将数据写入文件。...函数 int close(int fd); 错误处理函数: 与errno相关 printf("xxx error: %s\n",errno); read函数 ssize_t read(int fd,...,flgs); 获取文件状态:F_GETFL 设置文件状态:F_SETFL 文件描述符 PCB进程控制块:本质是结构体 成员:文件描述符文件描述符0/1/2/3/4…1023 0–STDIN_FILENO...1–STDOUT_FILENO 2–STDERR_FILENO 阻塞/非阻塞 是设备文件,网络文件属性 阻塞:当进程调用一个阻塞系统函数时,该进程被置于睡眠状态,这时内核调度其他进程运行,直到该进程等待事件发生了...CPU处于该进程上下文环境中,程序计数器里保存着该进程2指令地址,通常寄存器里保存着该进程运算过程中间结果,正在执行该进程指令,正在读写该进程地址空间 就绪状态。

20050

socket使用方法_socket调试工具怎么用

否则将会返回-1表明创建失败,并且errno来表明特定错误号。 关于流程。socketpair()函数创建出两个进程,fork()之后这两个进程都会执行主程序中代码,这个一定要注意!...fork出来之前打开文件描述符是能被子进程继承下来,但是一旦子进程已经创建后,父进程打开文件描述符要怎样才能传递给子进程呢?...Unix提供相应技术来满足这一需求,这就是同一台主机上进程文件描述符传递,很美妙而且强大技术。...值得一提是发送进程在将’文件描述符’发送出去后,即使立即关闭该文件描述符,该文件描述符对应文件设备也没有被真正关闭,其引用计数仍然大于一,直到接收进程成功接收后,再关闭该文件描述符,如果这时文件设备引用计数为...OK,下面是一个简单文件描述符传递例子,该例子实现这样一个功能:即子进程负责在父进程传递给它文件描述符对应文件尾加上特定’LOGO’字符串。

60430

Linux下Socket编程(三)——非阻塞select使用简介

,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作程序,它能够监视我们需要监视文件描述符变化情况读写或是异常。...readfds 这个集合中应该包括文件描述符,我们是要监视这些文件描述符读变化,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返回一个大于0值,表示有文件可读...可在errno中查看 >0 监听文件发生了可读或可写变化 fd_set类型变量相关宏定义 FD_ZERO(fd_set *fdset):清空fdset与所有文件描述符联系。...这个错误值将是0,如果建立连接时遇到错误,则这个值是连接错误所对应errno值(比如:ECONNREFUSED,ETIMEDOUT等) 连接成功后再设置为阻塞模式(方便读写) 关闭socket select...读取套接口上错误"是遇到第一个可移植性问题;如果出现问题,getsockopt源自Berkeley实现是返回0,等待处理错误在变量errno中返回;但是Solaris会让getsockopt返回

3.9K10

linux系统编程之文件与IO(一):文件打开关闭

一、文件描述符 对于Linux而言,所有对设备或文件操作都是通过文件描述符进行。当打开或者创建一个文件时候,内核向进程返回一个文件描述符(非负整数)。...一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量定义在unistd.h...,如果文件不存在则建立文件 O_EXCL 如果已经置O_CREAT且文件存在,则强制open() 失败 O_TRUNC 在open() 时,将文件内容清空 O_CLOEXEC 在进行exec进程替换时关闭打开文件描述符...S_IWOTH | S_IXOTH 为了重新利用文件描述符,用close()系统调用释放打开文件描述符  函数原型:int close(int fd); 函数参数: fd :要关闭文件文件描述符...需要说明是,在linux系统编程中使用一些系统调用函数一般如果失败返回-1且会置全局变量errno为特定错误码,可以使用perror打印,或者通过strerror(errno)打印错误提示。

1.7K90

【Socket】Socket相关概念及函数

Socket详解 套接字概念 概念 Socket中文意思是"插座",在Linux环境下,用于表示进程间网络通信特殊文件类型。本质为内核借助缓冲区形成文件。...是文件,所以我们可以使用文件描述符引用套接字。 Linux系统将其封装成文件目的是为了统一接口,使得读写套接字和读写文件操作是一致。区别是文件应用于本地持久化数据读写。...而套接字应用于网络进程间数据传递。 在TCP/IP协议中,IP地址+TCP或UDP端口号可以唯一标识网络通讯中一个进程。 IP地址+端口号就对应一个Socket。...返回值: 成功:返回指向新创建socket文件描述符, 失败:返回-1,错误号设置在errno中 补充: socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符...,错误编号值,一般取 errno 值 返回值: 错误原因 示例: fprintf(stderr, "error, reason: %s\n",strerror(errno)); #include

75510

Nginx(4):守护进程,一份nginx实现,一份我实现,看着拿呗

创建步骤 1、创建“孤儿进程”,形式上与终端脱离; 2、让这个“孤儿进程”成为新会话组长,防止进程被原会话中其他进程干扰; 3、改变工作目录并重设文件创建掩码; 4、关闭文件描述符,因为没必要开着了...出于安全性考虑,往往不希望这些文件被别的用户查看。 这时,可以使用umask函数修改文件权限,创建掩码取值,以满足守护进程要求。...*/ umask(0); /* 新产生进程从父进程继承了某些打开文件描述符,如果不使用这些文件描述符,则需要关闭它们。...,第二子进程继续(第二子进程不再是会话组长) exit(0); } // 5)关闭打开文件描述符 /* NOFILE 为 宏定义 NOFILE...新产生进程从父进程继承了某些打开文件描述符,如果不使用这些文件描述符,则需要关闭它们。

88620

IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力

上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度。 IO复用是什么?...IO即Input/Output,在网络编程中,文件描述符就是一种IO操作。 为什么要IO复用? 1.网络编程中非常函数是阻塞,如connect,利用IO复用可以以非阻塞形式执行代码。...1.在连接数量较大场景,select遍历需要每个描述符,epoll由内核维护事件表,只需要处理有响应描述符。 2.select本身处理文件描述符受到限制,默认1024。...第一次学epoll时,容易错误认为epoll也可以实现并发,其实正确的话是epoll可以实现高性能并发服务器,epoll只是提供了IO复用,在IO“并发”,真正并发只能通过线程进程实现。...实际上这两个客户端都是在一个进程上运行,前面提到过各个描述符之间是相互不影响,所以是一个进程轮循在处理多个描述符

1.8K90

Linux系统编程:基本IO系统调用

文件描述符 进程每打开一个文件时候,会获得该文件文件描述符,而后续读写操作都把文件描述符作为参数。在用户空间或者内核空间,都是通过文件描述符来唯一地索引一个打开文件。...文件描述符使用int类型表示,文件描述符范围从0开始,到上限值-1,默认情况下,上限值为1024,也就是说,进程默认情况下最多可以打开1024个文件。...每个进程都至少包含三个文件描述符文件描述符 表示 宏 0 标准输入(stdin) STDIN_FILENO 1 标准输出(stdout) STDOUT_FINENO 2 标准错误(stderr) STDERR_FILENO...umask是进程级属性,通过调用umask()函数来修改,支持用户修改新创建文件和目录权限。...被设置为EINTR与EAGAIN,其他情况下都是出现严重文件读取错误,重新执行读操作不会成功。

3K30
领券