参考http://zxuhong.blog.51cto.com/368977/99283/
注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。
在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下
int daemon ( int __nochdir, int __noclose) ;
如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。
经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。
我们来看一个简单的例子。例如编写例子程序test.c
#include <unistd.h>
#include <stdio.h>
int do_sth( )
{
//Add what u want
return 0 ;
}
int main( )
{
daemon( 0 , 0 ) ;
while ( 1 )
{
do_sth( ) ;
sleep( 1 ) ;
}
}
编译并运行
[ leconte@ localhost daemon] $ gcc -o test test.c
[ leconte@ localhost daemon] $ ./ test
程序进入了后台,通过ps查看进程情况,可以看到进程的父进程id为1,即init进程
用lsof查看test进程所打开的文件,可以看到文件描述符0,1,2都被重定向到/dev/null
并且能够看到,进程的当前工作目录(cwd)为根目录/,daemon函数已经帮我们完成了daemon化的过程,接下来我们只需要关注于程序功能 的实现了。
守护进程
|
含义
|
alsasound
|
Alsa
声卡驱动的守护程序
|
acpid
|
替代传统
APM
电源管理标准的新型电源管理标准(
Advanced Configuration and Power Interface Daemon
)的守护进程
|
atalk
|
AppleTalk
网络的守护进程
|
amd
|
自动安装
NFS
的守护进程
|
anacron
|
自动运行任务的守护进程
|
apmd
|
高级电源管理(
Advanced Power Management
)的守护进程
|
arpwatch
|
记录日志并构建一个在
LAN
接口上看到的以太网地址和
IP
地址的进程
|
atd
|
at
和
batch
命令的守护进程
|
autofs
|
自动安装管理进程的守护进程,与
NFS
相关,依赖于
NIS
服务器
|
bootparamd
|
引导参数服务器,为
LAN
上的无盘工作站提供引导所需的相关信息
|
bluetooch
|
蓝牙服务的守护进程
|
crond
|
Cron
服务的守护进程,该程序周期地运行用户调度的任务
|
chargen
|
使用
tcp
协议的
chargen server
,(
Character Generator Protocol
)是一种网络服务,主要功能是提供类似远程打字的功能
|
chargen-udp
|
使用
udp
协议的
chargen server
的守护进程
|
cpuspeed
|
监测系统空闲百分比,降低或加快
CPU
时钟速度和电压的守护进程
|
dhcpd
|
动态主机控制协议
(Dynamic Host Control Protocol)
服务的守护进程
|
cups
|
提供第三代打印功能的守护进程
(Common UNIX Printing System)
|
daytime
|
使用
tcp
协议日期时间的守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能
|
daytime-udp
|
使用
udp
协议日期时间的守护进程
|
dc_server
|
使用
SSL
安全套接字代理服务器的守护进程
|
dc_client
|
使用
SSL
安全套接字客户端的守护进程
|
diskdump
|
服务器磁盘备份的守护进程
|
echo
|
服务器回显客户数据服务的守护进程
|
echo-udp
|
使用
udp
协议的服务器回显客户数据服务守护进程
|
gated
|
网关路由的守护进程
|
gpm
|
为文本模式下的
Linux
程序如
mc(Midnight Commander)
提供鼠标的支持的守护进程(
General Purpose Mouse Daemon
)
|
httpd
|
Web
服务器
Apache
的守护进程
|
inetd
|
网络管理的守护进程
|
innd
|
Usenet
新闻服务器的守护进程
|
iiim
|
中文输入法服务器的守护进程
|
iptables
|
防火墙功能的守护进程
|
irda
|
红外功能的守护进程
|
isdn
|
isdn
启动和中止服务的守护进程
|
krb5-telnet
|
使用
kerberos 5
认证的
telnet
守护进程
|
klogin
|
远程登陆的守护进程
|
irqbalance
|
对多个系统处理器环境下的系统中断请求进行负载平衡的守护进程
|
kshell
|
Kshell
服务器的守护进程
|
kudzu
|
硬件自动检测的守护进程,自动检测硬件的添加、删除等
|
ldap
|
目录访问协议服务器的守护进程(
Lightweight Directory Access Protocol
)
|
lm_seroems
|
检测主板工作情况的守护进程
|
lpd
|
老式打印服务的守护进程
|
mdmonitor
|
RAID
相关设备的守护程序
|
mysqld
|
Mysql
数据库的守护进程
|
named
|
名称服务器的守护进程
|
netplugd
|
网络接口管理的守护进程(
Network Cable Hot Plug Management Daemon
)
|
netdump
|
远程网络备份服务器的守护进程
|
netfs
|
安装和卸载
NFS
、
SAMBA
和
NCP
网络文件系统的守护进程(
Network Filesystem Mounter
)
|
ntpd
|
使系统和一个精确的时间源保持时间同步的协议守护进程(
Network Time Protocol Daemon
)
|
network
|
激活、关闭网络接口的守护进程
|
pcmcia
|
支持笔记本
PCMCIA
服务的守护进程
|
portmap
|
支持
RPC
连接的守护进程,
RPC
被用于
NFS
以及
NIS
等服务
|
postgresql
|
PostgreSQL
数据库的守护进程
|
random
|
随机数生成器的守护进程
|
rawdevices
|
使用集群文件系统时用于加载
raw
设备的守护进程
|
routed
|
支持
RIP
协议的自动
IP
路由表维护的守护进程
|
rsync
|
远程数据备份(
Remote Sync
)的守护进程
|
rsh
|
Shell
服务器的守护进程
|
sendmail
|
邮件服务器的守护进程
|
smb
|
Samba
文件共享
/
打印服务的守护进程
|
snmpd
|
本地简单网络管理的守护进程
|
squid
|
代理服务器
squid
守护进程
|
sshd
|
OpenSSH
(
Secure Shell Protocol
)服务器的守护进程
|
smartd
|
监控硬盘的守护进程(
Self Monitor Analysis and Reporting Technology System
)
|
syslog
|
系统引导时启动
syslog
和
klogd
系统日志守护进程的程序
|
time
|
使用
tcp
协议从远程主机获取时间和日期的守护进程
|
time-udp
|
使用
udp
协议从远程主机获取时间和日期的守护进程
|
tux
|
在
Linux
内核中运行
apache
服务器的守护进程
|
vsftpd
|
vsftp
服务器的守护进程
|
vncserver
|
VNC
服务(
Virtual Network Computing
虚拟网络计算)的守护进程
|
xfs
|
X Window
字型服务器的守护进程,为本地和远程
X
服务器提供字型集
|
xinetd
|
支持多种网络服务的核心守护进程
|
ypbind
|
使客户进程能绑定或连接到网络信息系统(
Network Information System
)服务器的守护进程
|
yppasswdd
|
网络信息系统
NIS
口令服务器的守护进程
|
ypserv
|
网络信息系统
NIS
主服务器的守护进程
|
yum
|
自动升级和软件包管理的守护进程
|