创建守护进程以及为什么fork两次

守护进程(Daemon)常驻后台,用于C/S服务,如服务器监听端口。创建守护进程通常包括设置文件模式创建屏蔽字、调用fork、setsid等步骤。为了彻底脱离控制终端和防止僵尸进程,有时会fork两次。第一次fork让父进程退出,第二次fork确保不会成为会话首进程,避免重新获取控制终端。
摘要由CSDN通过智能技术生成

守护进程

守护进程也叫精灵进程(Daemon),它在后台运行,独立于控制终端并周期性地执行某种任务或等待某些事情发生,一般用于C/S 服务中,在服务端监听端口,等待客户端的连接,如果有客户端发出连接,则fork出一个子进程去响应,而守护进程继续监听。

步骤

创建一个守护进程一般有如下几步:

  1. 调用umask(0),将文件模式创建屏蔽字改为0
  2. 调用fork(),父进程退出,目的是:
    • 父进程终止可以让shell切换到前台继续等待用户输入命令
    • 保证子进程不是一个进程组的组长进程
  3. 在子进程中调用 ssetsid(),会导致如下结果:
    • 调用进程成为新会话的首进程
    • 调用进程成为一个进程组的组长进程
    • 调用进程脱离终端,即没有控制终端
  4. 调用chdir("/")将当前工作目录更改为根目录,目的是防止用户改动目录,从而影响进程的运行
  5. 关闭相应的文件描述符,原因是,当前进程已经脱离终端,防止产生并不需要的交互作用,还有一个原因,用fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,所以需要关闭
  6. 忽略SIGCHLD信号,该动作是为了,子进程退出的时候资源能够被系统所回收,防止出现僵尸进程
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值