linux下的守护进程daemon

  什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的。

  守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都可用,就要求这个服务是一直运行的,于是守护进程就守护着这个服务不挂掉。linux里面常见的守护进程一般都是以d结尾的,比如apache的httpd,samba的smbd,ssh的sshd。

  它的第二个特征是与启动它的进程的环境隔离,包括关闭它打开的所有文件描述符,终端,会话,进程组,某些环境变量(如工作目录),文件掩码。

    为什么要脱离终端?

      如果它不脱离终端,那么就有可能收到来自终端的信号,比如SIGINT(Ctrl+c,会被发往所有前台进程组的进程,它的默认行为就是结束进程),SIGHUP(会被发往会话首进程)。

    为什么要关闭它打开的所有文件描述符?

      如果创建它的进程之前打开了某个文件,然后创建这个守护进程,这样子进程就继承了fd,如果守护进程不关闭这个fd,一个是会占用资源,二个我猜测和改变工作目录一样,如果这个文件是位于挂载目录,那么就无法umount了。

    为什么要清掩码?

      这是因为假设它的父进程之前对掩码做过特殊设置,守护进程作为子进程会继承这个,那么它创建文件时,因为掩码的缘故,文件的权限就可能和实际设置的不一致。

  第三个特征,守护进程通常由启动脚本启动

  

  来自APUE守护进程章节例子,将一个进程守护化的代码:

  -----

  或者使用Linux的现成函数,daemon。

时间: 2024-10-15 01:30:53

linux下的守护进程daemon的相关文章

linux下服务器守护进程的安装

一.在服务器上安装rstatd守护进程安装步骤:1. 从网上下载rstatd2. 将该文件放到/home/user目录下3. chmod 777 rpc.rstatd----改变该文件读写的权限,拥有所有权限.4. chmod 777 configure ---同上5. ./configure ---配置6. make ---编译7. make install ---安装8. rpc.rstatd ---启动rstatd进程二.在lr中配置从LR里面add measurement, 填写linu

linux下的守护进程

Linux下的常驻进程的作用不可忽略,但这里面的问题也不能忽略,怎么启动进程,怎么结束进程,怎么在进程挂掉之后重启进程都要设计的合理.下面看一个shell控制的php常驻进程的例子. 不废话,直接捞干货,上代码,通过代码来讲解更容易理解: #!/bin/sh #filename test.sh #绝对定位该文件的位置,不随执行目录而变化 cd $(cd "$(dirname "$0")";pwd) readonly path=$(pwd)/ file=$1; Run

linux下python守护进程编写和原理理解

原文地址: http://www.01happy.com/linux-python-daemon/ 守护进程英文为daemon,像httpd.mysqld.vsftpd最后个字母d其实就是表示daemon的意思. 守护进程的编写步骤: fork子进程,而后父进程退出,此时子进程会被init进程接管. 修改子进程的工作目录.创建新进程组和新会话.修改umask. 子进程再次fork一个进程,这个进程可以称为孙子进程,而后子进程退出. 重定向孙子进程的标准输入流.标准输出流.标准错误流到/dev/n

linux下的守护进程及会话、进程组

守护进程.会话.进程组网上有许多不错的资料.我也是网上搜罗了一堆,加上自己的理解.不敢说原创,只是写在这怕自己忘记罢了.才疏学浅,难免有错误,欢迎大家指正.下面这篇写很不错,大家可以去看看:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html.下面的部分内容引用了他的描述. 进程组:进程组就是把一个或多个进程划为一组,给这个组分配一个组id(pgid),这个id通常是进程组组长(该组的第一个进程)的pid.如果进程组组长退

linux应用开发-守护进程

linux应用开发-守护进程 linux应用开发-守护进程 一 守护进程 默认的后台运行的进程 二 与安卓的服务相关联 三 守护进程编写 1 脱离控制终端tty,让父进程为init 2 禁止进程重新打开控制终端 3 重新开启会话setsid(); 4 关闭打开的文件描述符,进程从创建它的父进程哪里继承了打开的文件描述符 ,若不关闭,将会造成资源浪费,造成进程所在的文件系统无法卸下以及引起无法预料的错误 可以使用for循环关闭 for (i = 0 ; i < 文件描述符的个数; i++) { c

从时间进程日志上面了解守护进程daemon的使用

说起进程呢? 在俺心中永远有种高大上的感觉,哈哈,自从了解到了进程方面的东西,也觉得进程这个执行过程真的很神奇,但是在了解到了还有守护进程方面的东东的时候又觉得貌似更加的让俺魂不守舍啦!觉得自己可以做到  觉得从一名屌丝立马逆袭成了高大上啦.O(∩_∩)O哈哈~ 那么,进程守护具体是什么呢?相信看这篇文章的牛牛们都对这方面有一定的了解啦.所以就带着复习或者巩固或者挑刺的心理来看看吧. 上面就是大致的创建守护进程的步骤啦,用语言来描述的话,共需要5步即可建立一个守护进程: 1>用fork()函数创

Linux下杀僵尸进程办法

1) 检查当前僵尸进程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39 Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie # ps -ef | grep defunct | gr

linux下实现监控进程网络带宽

嗯,最近都在网易游戏实习,所以貌似有段时间没有上来写点东西了...来网易游戏实习最主要的目的其实就是想知道在游戏公司里面工作都是些什么内容,毕竟自己以前也没有接触过游戏公司..还比较的好奇... 以前可能觉得游戏公司各种高大上吧,做的工作各种有意思..现在看来应该也不是这样子的,毕竟大多数时间应该还是在写游戏的逻辑代码了... 挺奇怪的...感觉虽然在游戏公司实习,但是做的事情还是自己的老本行...因为要用python开发一个服务器的监控系统,而且有提出要监控某个指定进程所占用的网络带宽的情况.

linux 下查看一个进程运行路径

在linux下查看进程大家都会想到用 ps -ef|grep XXX 可是看到的不是全路径,怎么看全路径呢? 每个进程启动之后在 /proc下面有一个于pid对应的路径 例如:ps -ef|grep python 显示:oracle    4431  4366  0 18:56 pts/2    00:00:00 python Server.py 4431就是进程号 到/proc/4431下,ls -l 会看到(需要root权限): 总用量 0 -r--r--r--    1 oracle