Linux 进程环境 ---- 守护进程

守护进程概念:

        Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。

守护进程特点:

    首先,守护进程最重要的特征是后台运行。其次,守护进程必须与其当前运行环境隔离开来。这些环境包括未关闭的文件描述符、控制终端、会话、和进程组、工作目录以及文件创建掩码等。这些环境通常是守护进程从执行它的父进程(特别是shell)继承下来的。最后守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,也可以由作业控制进程crond启动,还可以由用户终端(通常是shell)执行。除了以上这些以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把普通进程按照上述的守护进程特性改造成为守护进程。

守护进程的创建步骤:

    1、创建子进程,父进程退出。

        由于守护进程是脱离终端的,因此完成第一步后就会在shell终端里造成一个程序以及运行完毕的假象。之后的所有工作都在子进程中完成,而用户在shell终端里可以执行其他命令,从而在形式上做到与控制终端脱离。实现方案:创建子进程后,父进程退出,然后子进程继续执行。
    2、在子进程中创建新的会话(脱离终端控制)

     在这里使用的是系统函数setsid()来创建一个新的会话,并且担任该会话组的组长,摆脱原会话的耦控制-》摆脱原进程的控制=》摆脱原控制终端的控制。
    3、改变当前的工作目录为根目录

    使用fork()创建的子进程是继承了父进程的当前工作目录,由于在进程运行中,当前目录所在的文件系统是不能卸载的,这对以后使用会造成很多麻烦。因此通常的做法是让“/”作为当前守护的当前工作目录,当然也可以指定其他别的目录来作为守护进程的工作目录。
    4、重设文件掩码

    文件权限掩码是屏蔽掉文件权限中的对应位。由于使用fork()函数创建的子进程继承了父进程的文件权限掩码,这就给该子进程使用文件带来 麻烦(比如父进程中的文件没有执行文件的权限,而在子进程中希望执行相应的文件,这个时候就会出问题)。因此在子进程中要把文件的权限掩码设置为0,即此时有很大的权限,这样可以大大增强该守护进程的灵活性。设置方法是:umask(0)。
    5、关闭文件描述符

    如同文件权限码一样,用fork()函数新创建的子进程会从父进程那里继承一些已经打开了的文件。这些文件被打开可能永远不会被守护进程读写使用,如果不关闭的话将会造成浪费系统资源,造成进程所在的文件系统无法卸载以及引起的预料错误。
   6、 fork()两次的意义:
    第一次fork():这里第一次fork的作用就是让shell认为这条命令已经终止,不用挂在终端输入上;在一个是为了后面的setsid()服务,因为调用setsid()函数的进程不能是进程组的组长(会报错Operation not permitterd),如果不fork子进程,那么此时的父进程是进程组的组长,无法调用setsid()。所以这里子进程变成为一个新的会话组组长。
    第二次fork():第二次fork是为了避免后期进程误操作而在此打开终端。由于当地的子进程为独立的会话,且是会话组长、独立的进程组不受控制终端控制,但是可以打开控制终端,因为打开一个控制终端的前提条件是该进程必须是会话组组长,而我们通过第二次fork(),确保了第二次fork()出来的子进程不是会话组组长。。。。
例子:
    后面补

以上知识点均摘抄自网络加上自己的一点点理解,如若侵权,请发私信联系删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值