Linux下的守护进程

什么是守护进程?

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。

守护进程的特点:

1.守护进程(Daemon)是在后台运行的一种特殊进程,它脱离于终端,从而可避免进程被任何终端所产生的信号打断,它在执行进程中的产生信息也不在任何终端上显示。

2.守护进程周期性地执行某种任务或等待处理某些发生的事件。

我们可以使用ps axj 命令查看到Linux下的守护进程

Linux下的守护进程_第1张图片

如果想让某个进程不因为用户或中断或其他变化而影响,那么就必须把这个进程变成一个守护进程。

按照服务类型分为:

  1. 系统守护进程:syslogd、login、crond、at等。

  2. 网络守护进程:sendmail、httpd、xinetd等。

  3. 独立启动的守护进程:httpd、named、xinetd等。

  4. 被动守护进程(由xinetd启动):telnet、finger、ktalk等。

守护进程的编程流程:

1.用fork()创建子进程,退出父进程

调用fork函数创建子进程后,使父进程立即退出。从而使产生的子进程将变成孤儿进程,并被init进程接管,同时,所产生的新进程将变为在后台运行。

2.脱离终端控制,调用setsid()函数创建新会话

因为子进程继承了父进程的一些信息,包括会话相关的消息,子进程必须要脱离父进程所在的会话,必须创建新的会话,让子进程变为新会话的首进程。

3.改变工作目录 用函数chdir("/")

因为使用fork()创建的子进程继承了父进程的当前工作目录。由于在进程运行过程中,当前目录所在的文件系统(如“/mnt/usb”等)是不能卸载的,这对以后的使用会造成诸多的麻烦。因此,通常的做法是让“/”作为守护进程的当前工作目录,这样就可以避免上述问题。

4.清除掩码  用umask()函数

由于进程从创建它的父进程那里继承了文件创建掩码。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除。

5.关闭描述符close()

同样的,进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。

你可能感兴趣的:(Linux)