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

python 守护进程(daemon)

3、进程再次fork一个进程,这个进程可以称为孙子进程,然后进程退出。 4、重定向孙子进程标准输入流,标准输出流,标准错误到/dev/null #!...'/dev/null', stderr='/dev/null'):     # 重定向标准文件描述符(默认情况下定向到/dev/null)       try:         pid = os.fork...2.修改进程的工作目录 进程创建的时候会继承父进程的工作目录,如果执行的程序是U盘里面,就会导致U盘不能卸载。...,fork孙子进程处理, 6.重定向孙子进程标准输入流,标准输出流,标准错误流到/dev/null 因为是守护进程,本身已经脱离了终端,那么标准输入流,标准输入流,标准错误流就没有什么意义了,所以都转向到.../dev/null,就是丢弃的意思

1K30

linux系统编程之进程(五):终端、作业控制与守护进程

实际上一般的进程(前后台) 关闭终端窗口后,会收到 SIGHUP 信号导致中断,可以使用 nohup command  args > /dev/null 2>&1 & 来忽略 hangup 信号,或者直接使用...四、创建守护进程步骤 调用fork(),创建新进程,它会是将来的守护进程 进程中调用exit,保证进程不是进程组组长 调用setsid创建新的会话期 将当前目录改为根目录 将标准输入、标准输出...、标准错误重定向到/dev/null 成功调用setsid函数的结果是: 创建一个新的Session,当前进程成为Session Leader,当前进程的id就是Session的id。.../null", O_RDWR); // 将标准输入,标准输出等都重定向到/dev/null         dup(0);         dup(0);     }     return 0; }...noclose:=0将标准输入、标准输出、标准错误重定向至“/dev/null” 注:也有一些说法,表示daemon 实现是fork 2 次,具体可以google fork 2 times daemon

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

Python守护进程daemon实现

注意,所有守护进程都以超级用户(用户ID0)的优先权运行。没有一个守护进程具有控制终端,终端名称设置问号(?)、终端前台进程组ID设置-1。缺少控制终端是守护进程调用了setsid的结果。...6、某些守护进程可以打开/dev/null使其具有文件描述符0、1、2,这使任何一个试图读标准输入、写标准输出或标准错误的库例程都不会产生任何效果。...7、忽略SIGCHLD信号    这一步并非必须的,只对需要创建进程的守护进程才有必要,很多服务器守护进程设计成通过派生子进程来处理客户端的请求,如果父进程不对SIGCHLD信号进行处理的话,进程终止后变成僵尸进程...,通过将信号SIGCHLD的处理方式设置SIG_IGN可以避免这种情况发生。...stdout='/dev/null', stderr='/dev/null'): #重定向标准文件描述符(默认情况下定向到/dev/null) try: pid = os.fork

7.2K30

php如何编写守护进程

(0)文件创建屏蔽字,也就是文件的特殊权限设置(PHP手册) 将进程设置会话首进程,也就是开启两个进程,父进程退出,进程设置setsid(什么是会话?...如何编写) 将文件的目录设置根目录 关闭文件的标准输入、标准输出、标准错误[0,1,2],也就是当程序开启守护进程后,不在接收控制终端的控制影响如:按Ctrl+C退出程序等等 编写程序 //第一步 umask...(STDIN); fclose(STDOUT); fclose(STDERR); // 这里用dev/null来代替标准输入,标准输出,标准错误,dev/null 表示空设备文件或黑洞文件,所有写入其中的数据...执行命令ps -aux 查看进行,发现该进程下并没有控制终端,并且睡眠状态下 以上则是简单的守护进程编写,当然也可以再以上的基础上进阶,比如开启守护进程后,创建多进程进程监听请求并写文件或者写日志...,进程接收到信号退出后,父进程清理进程并退出等等 本文北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn

1K10

python守护进程

守护进程英文daemon,像httpd,mysqld,最后一个字母d其实就是表示daemon的意思。 守护进程的编写步骤: fork进程,然后父进程退出,此时进程会被init进程接管。...重定向孙子进程标准输入流,标准输出流,标准错误到/dev/null 完成上面的4个步骤,那么最终的孙子进程就称为守护进程,先看下代码,后面分析下步骤的原因。 #!...2.修改进程的工作目录 进程创建的时候会继承父进程的工作目录,如果执行的程序是U盘里面,就会导致U盘不能卸载。...为了避免这个问题,fork孙子进程处理, 6.重定向孙子进程标准输入流,标准输出流,标准错误流到/dev/null 因为是守护进程,本身已经脱离了终端,那么标准输入流,标准输入流,标准错误流就没有什么意义了...,所以都转向到/dev/null,就是丢弃的意思 我们来运行一个这个程序,看看效果 ?

1K20

教你写一个守护进程

调用 fork 函数时,进程继承了父进程的会话、进程组、控制终端等,虽然父进程退出了,但原先的会话期、进程组、控制终端等并没有改变,因此,那还不是真正意义上使两者独立开来。...因此,把文件权限掩 码设置 0,确保进程有最大操作权限、这样可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是 umask,通常的使用方法 umask(0)。 关闭不再需要的文件描述符。...将文件描述符号为 0、1、2 定位到/dev/null。将守护进程标准输入、标准输出以及标准错误重定向到/dev/null,这使得守护进程的输出无处显示、也无处从交互式用户那里接收输入。...,则进程将成为僵尸进程;如果父进程 wait 等待进程退出,将又会增加父进程的负担、也就是增加服务器的负担,影响服务器进程的并发性能, Linux 下,可以将 SIGCHLD 信号的处理方式设置...运行之后,没有任何打印信息输出,原因在于守护进程已经脱离了控制终端,它的打印信息并不会输出显示到终端,代码中已经将标准输入、输出以及错误重定位到了/dev/null,/dev/null 是一个黑洞文件

1.4K30

Python 守护进程

标准输入,标准输出和标准错误输出建立新的文件描述符。即使你不打算     使用它们,打开着它们不失一个好主意。...准确操作这些描述符是基于各自     爱好;比如说,如果你有一个日志文件,你可能希望把它作为标准输出和标     准错误输出打开,而把‘/dev/null’作为标准输入打开;作为替代方法...,你可     以将‘/dev/console’作为标准错误输出和/或标准输出打开,而‘/dev/null’作     标准输入,或者任何其它对你的守护程序有意义的结合方法。...tid=239&goto=lastpost&highlight=自行查看): def daemonize(stdout='/dev/null', stderr=None, stdin='/dev/null...()的返回值大于零(即进程的PID),进程os.fork()的返回值等于零,父进程结束,进程继续执行,这时候又遇到第二个os.fork(),如上次一样,原来的进程变成了父进程,又产生新的进程

91430

Linux 守护进程|应急响应

可以看到,我们起了一个PID1779的进程进程不断向我们打印ping的结果,那么本质上来讲是什么样的呢? 我们使用 ps ajfx 来看一下 ?...,终端前台进程组ID设置-1 工作目录 \ (根) 这其中很明显不完全准确,但是也都是基于实际情况分析出来的,所以我一直纠结后台进程、nohup起的后台进程和守护进程什么关系,直到遇到了这篇文章...关闭了文件描述符0、1和2之后,daemon通常会打开/dev/null并使用dup2()(或类似的函数)使所有这些描述符指向这个设备。..., 终端前台进程组ID设置-1 杀死守护进程没啥特别的,该杀杀,当然前提是权限要够 ---- 看到这里已经可以了,基本上知识点都接触到了,下面是我关于进程相关知识学习过程中思考的一些问题,不解决不舒服那种...还是存在标准输出,只不过是重定向到 nohup.out中了 3. ping www.baidu.com > /dev/null 2>&1 & 更像是守护进程了吗 更像了,但还不是 ?

3.8K30

python的subprocess模块

需要说明的是,该方法python3.x中才有。 call()方法启动的进程,其标准输入输出会绑定到父进程的输入和输出。调用程序无法获取命令的输出结果。...bufsize:缓冲区大小,可不用关心 stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误 shell:与上面方法中用法相同 cwd:用于设置进程的当前目录 env:用于指定子进程的环境变量...,用Python当参数,Python进入环境 stdin 标准输入 stdout 标准输出 stderr 标准错误 pid the process ID of the child process --...输出,错误句柄 preexec_fn:只Unix平台下有效,用于指定一个可执行对象,它将在进程运行之前被调用 close_sfs:Windows平台下,如果close_sfs被设置True,则新创建的进程将不会继承父进程的输入...、输出、错误管道 所以不能将close_fds设置True同时重定向进程标准输入、输出与错误 shell:同上 cod:用于设置进程的当前目录 env:用于指定子进程的环境变量。

3K20

Linux系统下进程编程之进程状态和守护进程解析(五)

守护进程的父进程是init进程,因为它真正的父进程fork出进程后就先于进程exit退出了,所以它是一个由init继承的孤儿进程。...(3)调用chdir函数将当前进程工作目录设置/ 【chdir("/");】 (4)umask设置0以取消任何文件权限屏蔽,使得进程具有最大的权限 【umask(0);】 (5...(6)将0、1、2三个文件描述符定位到/dev/null(也就是把这个进程标准输入、标准输出和标准出错信息全部绑定到/dev/null) 3、示例代码编写: 任何一个进程都可以将自己实现成守护进程...} // 执行到这里就是进程 // setsid将当前进程设置一个新的会话期session,目的就是让当前进程 // 脱离控制台。.../null", O_RDWR); open("/dev/null", O_RDWR); open("/dev/null", O_RDWR); } 输出结果,我们可以看到终端上看不到打印 "I

82410

Linux命令中的重定向(>)和管道(|)的讲解

我们知道,Linux启动时,最开始会创建init进程,其余的程序都是这个进程进程。...对于每个Linux进程,其都是init的进程,包括bash命令窗口,而其中执行的shell命令,则更是如此。...我们又知道,Linux中,进程会继承父进程的文件描述符,所以说,Linux中每个程序,执行的每个shell命令,拥有这三个文件描述符,而程序后续打开的文件,其文件描述符则(从3开始)依次增加。.../dev/null 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉。...- 关闭所有输出 和上面类似:ls exists.txt no-exists.txt 1 > /dev/null 2 > /dev/null ls exists.txt no-exists.txt

55010

书中关于伪终端的一个纰漏

运行时的 pty 首先通过 fork+exec 产生 slowout 进程,其中标准输入、输出分别重定向到中间的伪终端从设备(pty slave device), 然后它自身又通过 fork 一分二...作者认为问题出现在 pty 父进程向 pty 进程发送的这个 SIGTERM 信号上,因为重定向到 /dev/null 后,pty 父进程会从 stdin 读到 EOF, 从而向 pty 进程发送...所以他 pty 程序加了一个 -i 选项,如果该选项生效, 就在父进程读 stdin 失败后,不再向进程发送 SIGTERM 信号,从而允许 pty 进程读 slowout 的输出直到 slowout.../slowout 可以通过 ps 命令观察到卡死的进程,7650 pty 进程,7649 slowout 进程,7648 pty 父进程已退出。...但是 pty 父进程早就因为读取 /dev/null 得到 EOF 而退出了,只不过临退出前因为指定了 -i 参数,没有将 pty 进程一并结束罢了。

42820

Python 执行系统命令

system函数可以将字符串转化成命令服务器上运行;其原理是每一条system函数执行时,其会创建一个进程系统上执行命令行,进程的执行结果无法影响主进程。...,NONE表示不进行重定向,继承父进程,PIPE表示创建管道 stdout 程序的标准输出句柄,参数意义同上 stderr 程序的标准错误句柄,参数意义同上,特殊,可以设置成STDOUT,表示与标准输出一致...shell True时,表示将通过shell来执行 cwd 用来设置当前进程的目录 env 用于指定子进程的环境变量。...注意:如果希望通过进程的stdin向其发送数据,创建Popen对象的时候,参数stdin必须被设置PIPE。...6、Popen.kill():杀死进程。 7、Popen.stdin:如果在创建Popen对象是,参数stdin被设置PIPE,Popen.stdin将返回一个文件对象用于策进程发送指令。

1.6K10

linux 小结

date "+%F %T" timedatectl ntpdate 管道 管道一般用于过滤, A|b 命令A的正确输出作为命令B的操作对象 grep 取出含有搜寻内容的行 -v 反选,: ## tail 出有关键字的日志并输出后...nohup test.jar >/dev/null 2>&1 & # 将错误输出输出到屏幕,标准输出丢弃 nohup test.jar >/dev/null 2>&1 & 计划任务 at 一次性计划任务...cron 周期性计划任务 crond crontable 使用crontable 创建任务后任务会记录到/var/sponl/cron里面去 执行日志保存到/var/log/cron中 ## 这里,我们每天早上...表示获取执行上一个指令的返回值(0成功,非0失败) 变量截取 ${变量名:起始位置:截取长度} 表达式 test 条件表达式 [ 条件表达式 ] 命令1 && 命令2 短路判断(如果命令1执行成功...Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建进程,创建后父进程会立即退出 Type=oneshot:一次性进程

1.3K10
领券