详解linux系统中的守护进程 【百科全说】-凯发k8官方旗舰厅

腾讯视频/爱奇艺/优酷/外卖 充值4折起

守护进程daemon,是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。unix系统有很多守护进程,它们执行日常事务活动。

1、系统自举

自举(bootstrapping)一词来自于人都是靠自身的“自举”机构站立起来的这一思想。计算机必须具备自举能力将自己所有的元件激活,以便能完成加载操作系统这一目的,然后再由操作系统承担起那些单靠自举代码无法完成的更复杂的任务。

自举只有两个功能:加电自检和磁盘引导。

加电自检:当我们按下计算机电源开关时,头几秒钟机器似乎什么反应也没有,其实,这时的计算机正在进行加电自检,以断定它的所有元件都在正确地工作。如果某个元件有故障,显示器上就会出现报警提示信息(如果显示器也不能正常工作,则以一串嘟嘟声来报警)。由于大多数计算机工作非常可靠,加电自检报警非常罕见。

磁盘引导:查找装有操作系统的磁盘驱动器。从磁盘加载操作系统的原因有二,一是操作系统升级简单容易,二是使用户拥有选择操作系统的自由。

当加电自检和磁盘引导完成时,自举操作就启动一个读写操作系统文件和将它们复制到随机存储器中的过程,此时的机器才是真正意义上的计算机。计算机的启动可以有冷启动和热启动两种方式 ,它们之间的差别是热启动不进行机器的自检(机器本身配置的检查与测试),当计算机在使用过程中由于某些原因造成死机时,可以对计算机进行热启动处理。


2、守护进程的概念

通过ps axj命令可以查看到守护进程:
参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息。

代码如下:

ppid pid pgid sid tty tpgid stat uid time command
0 1 1 1 ? -1 ss 0 0:01 /sbin/init
0 2 0 0 ? -1 s< 0 0:00 [kthreadd]
2 3 0 0 ? -1 s< 0 0:00 [migration/0]
2 4 0 0 ? -1 s< 0 0:00 [ksoftirqd/0]...
1 2373 2373 2373 ? -1 s 1 4680 4680 4680 ? -1 ss 0 0:00 /usr/sbin/acpid -c /etc...
1 4808 4808 4808 ? -1 ss 102 0:00 /sbin/syslogd -u syslog...

凡是tpgid一栏写着-1的都是没有控制终端的进程,也就是守护进程。在command一列用[]括起来的名字表示内核线程,这些线程在内核里创建,没有用户空间代码,因此没有程序文件名和命令行,通常采用以k开头的名字,表示kernel。init进程我们已经很熟悉了,udevd负责维护/dev目录下的设备文件,acpid负责电源管理,syslogd负责维护/var/log下的日志文件,可以看出,守护进程通常采用以d结尾的名字,表示daemon。
创建守护进程最关键的一步是调用setsid函数创建一个新的session,并成为session leader。

例子:

c/c code复制内容到剪贴板

  1. void daemonize(void)
  2. {
  3. pid_t pid;
  4. printf("into deamonize/n");
  5. if (pid = fork() < 0)
  6. {
  7. perror("fork");
  8. exit(1);
  9. }
  10. else if (pid != 0)
  11. {
  12. exit(0);
  13. }
  14. setsid();
  15. if (chdir("/") < 0)
  16. {
  17. perror("chdir");
  18. exit(1);
  19. }
  20. close(0);
  21. open("/dev/null", o_rdwr);
  22. dup2(0, 1);
  23. dup2(0, 2);
  24. printf("out deamonize/n");
  25. }

3、编写守护进程

在编写守护进程程序时,需遵循一些基本规则:

(1)首先要做的是调用umask将文件模式创建屏蔽字设置为0。
(2)调用fork,然后使父进程退出。
(3)调用setsid以创建一个新会话。
(4)将当前工作目录更改为根目录。
(5)关闭不再需要的文件描述符。
(6)某些守护进程打开/dev/null使其具有文件描述符0、1和2,任何一个试图读标准输入、写标准输出或标准出错的库例程都不会产生任何效果。

与守护进程有关的一个问题是如何处理出错消息,需要有一个集中的守护进程出错记录设施,这就是syslogd进程。

4、守护进程惯例

为了正常运作,某些守护进程实现为单实例的,有就是在任一时刻只运行该守护进程的一个副本。文件锁和记录锁机制是一种方法的基础,该方法用来保证一个守护进程只有一个副本在运行。
在unix系统中,守护进程遵循下列公共惯例:

(1)若守护进程使用锁文件,那么该文件通常存放在/var/run目录中。锁文件的名字通常是name.pid,name是该守护进程或服务的名字。
(2)若守护进程支持配置选项,那么配置文件通常存放在/etc目录中。配置文件的名字通常是name.conf。
(3)守护进程可用命令行启动,但通常它们是由系统初始化脚本启动的。
(4)若一守护进程有一配置文件,那么当该守护进程启动时,它读该文件,但在此之后一般就不会再查看它。

详解linux系统中md5sum命令的用法

06/21 02:19
这篇文章主要介绍了详解linux系统中md5sum命令的用法,用来处理md5验证的相关操作,需要的朋友可以参考下 md5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.md5全称是报文摘要算法(message-digest algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的"指纹"(或称"报文摘要"),不同的文件产生相 同的报文摘要的可能性是非常非常之小的. 在linux或unix上,md

详解linux系统中的root权限控制

06/28 12:38
在linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户,没有用户许可其它普通用户是无法操作的,但对root除外.root用户的特权性还表现在root 可以超越任何用户和用户组来对文件或目录进行读娶修改或删除(在系统正常的许可范围内);对可执行程序的执行.终止;对硬件设备的添加.创建和移除等; 也可以对文件和目录进行属主和权限进行修改,以适合系统管理的需

详解linux系统中的进程初始化配置文件inittab

03/14 06:29
/etc/inittab文件描述了哪些进程开始启动并正常运行.inittab为linux初始化文件系统时init初始化程序用到的配置文件.这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机.关机.重启对应的命令;各运行级登陆时所运行的命令. inittab文件中的条目的格式如下: label:runlevels:action:process 下面分别介绍各个字段 1.label label 是一个独特的序列,确定了一个条目1 - 4字符,一些系统只支持2个字
12/13 10:25
一.获取源代码包并进行解压 从samba的官方网站可以下载最新的samba源代码包.下面我们以samba-3.5.9.tar.gz的源代码包作为案例进行解析.本例中,我们将源代码包放在目录/home/samba下,然后执行下面的命令进行解压缩. 代码如下: # tar –xzvf samba-3.5.9.tar.gz 二.配置configure 对源代码包进行解压缩后,进入目录 代码如下: # cd /home/samba/samba-3.5.9/source3 然后执行下面的命令进行配置. 代

详解linux系统中关机与重启相关命令的用法

01/08 06:55
shutdownshutdown 以一种安全的方式关闭系统.所有登陆用户都可以看到关机信息提示,并且 login (1) 将被阻塞.可以指定立刻关机,也可以指定系统在一定的延时后关机.所有进程都将接收到 sigterm 信号.这可以使 vi (1) 等程序有时间将处于编辑状态的文件进行存储,邮件和新闻程序进程则可以将所有缓冲池内的数据进行适当的清除等等. shutdown 通过通知 init 进程,要求它改换运行级别来实现.运行级别 0 用来关闭系统,运行级别 6 用来重启系统,运行级别 1 用

详解linux系统中的usr目录

04/14 17:42
linux 文件结构中,有一个很神奇的目录 —— /usr.之前一直没有怎么关注过它,反正程序都是安装在里边的,也没有什么值得追根溯源的东西.直到有一天 fedora 要简化整个文件系统体系,看到讨论才想到,usr 到底是什么的缩写呢,它又是怎么来的呢?讨论中,大部分观点认为:1.usr 是 unix system resources 的缩写:2.usr 是 user 的缩写:3.usr 是 unix software resources 的缩写. 根据常识判断,是 user 缩写的可能性不大,

详解linux系统中的日期设定与date命令的用法

03/10 04:24
名称 : date 使用权限 : 所有使用者使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [ format] [mmddhhmm[[cc]yy][.ss]] 说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :

详解linux系统中查询文档的man和info命令

01/17 05:23
manusage: man [option...] [章节] 手册页... -c, --config-file=文件   使用该用户设置文件  -d, --debug                输出调试信息  -d, --default              将所有选项都重置为默认值      --warnings[=警告]    开启 groff 的警告 主要运行模式:  -f, --whatis               等同于 whatis  -k, --apropos     

详解linux系统中的install命令的用法

12/31 01:25
用法:install [选项]... [-t] 源文件 目标文件 或:install [选项]... 源文件... 目录 或:install [选项]... -t 目录 源文件... 或:install [选项]... -d 目录... 此install 将文件(通常仅是编译后的文件)复制到您所选择的目的位置. 如果您希望在gnu/linux 操作系统上下载并安装一个即时可用的软件包, 您应当使用诸如yum(1) 和apt-get(1) 的软件包管理器. 在前三种形式中,将源文件复制到目标文件或
网站地图