linux中有两种方式管理守护进程(其实只要是调用了deamon函数的程序都能成为守护进程):
- standalone方式。进程被放到/etc/init.d中,启动方式可以选在用/sbin/service XXX restart,也可以用/etc/init.d/XXX restart。这两种方式本质一样都是运行了/etc/init.d/目录下面的某个脚本,这里面的脚本按照规范都要支持start stop restart这样的参数。这一类的程序都会作为一个单独的服务运行。
- super deamon方式。这种方式运行的进程都会注册到xinetd这进程,从外面看只有这一个进程,发给注册进程的消息都由xinetd转给注册进程来处理。xinetd的配置文件在/etc/inetd.conf,注册进xinetd的每个进程的配置在/etc/xinet.d/文件夹中。需要注意的一点是:inetd本身是一个守护进程,linux用standalone的方式来管理他,所以可以在/etc/init.d/目录中找到xinetd对应的脚本,就叫/etc/init.d/xinetd。
守护进程并一定会在系统启动的时候运行,需要在一些地方指定让系统来运行。启动顺序是:
- BIOS
- MBR
- kernel loading
- init program
- /etc/rc.d/rc.sysinit 运行初始化脚本
- /etc/rc.d/rc[0-6].d/ 运行不同运行level下的守护进程,每个运行level对应一个目录,目录下面都是软链接,软链接指向的位置都在/etc/init.d/目录下面。由此可见,init.d其实就是init daemon的含义是啊
- /etc/rc.d/rc.local 运行本地设置脚本
比较好的切入点是6和7,其中6是专门为启动时运行守护进程准备的,有专门的命令支持,他们是:
- /usr/sbin/ntsysv(red hat专有)
- /sbin/chkconfig
前者是图形化的,后者可以 --add --list --del ,来操作谁是启动运行的守护进程,前提是这个进程已经在/etc/init.d/下面有了。