守护进程

参考链接

Linux 守护进程的启动方法

守护进程

守护进程(daemon)

一直在后台运行的进程

许多服务器进程就是写成了 Daemon 程序,例如 Nginx、Redis、Apache 等

Linux 中一般把守护进程放在/etc/init.d/中

用途

为了保护程序/服务的正常运行,当程序被关闭、异常退出等时再次启动程序/恢复服务

让程序/服务能不中断地运行,在关闭终端后也能在后台默默运行

常见

http 服务的守护进程叫 httpd

mysql 服务的守护进程叫 mysqld


进程组(Process Group)

  • 进程集合,每个进程组有一个组长(Leader),其进程 ID 就是该进程组 ID

会话(Session)

  • 进程组集合,每个会话有一个组长,其进程 ID 就是该会话组 ID

控制终端(Controlling Terminal)

  • 每个会话可以有一个单独的控制终端,与控制终端连接的 Leader 就是控制进程(Controlling Process)

fork

  • 守护进程的父进程是 init 进程
  • 在创建时先从父进程 fork 出来一个子进程,退出父进程,这时子进程变成孤儿,就成了 init 的子进程
  • 子进程会继承父进程的会话,进程组,控制终端,文件描述符等。

setid

  • 通过setid()来创建新会话,同时也脱离了原来的进程组,会话以及控制终端,成为新的会话的组长
  • 此时它可能会再申请一个控制终端,所以我们再 fork 一下,并只保留新的子进程,这样就不是会话组长了,就不能申请控制终端了。

close(fd)

  • 之后再关闭从父进程继承的文件描述符
  • 至少要关闭 0,1,2 这三个文件描述符,分别对应了 stdin, stdout, 和 stderr
  • 不过通常用 sysconf(_SC_OPEN_MAX) 获取系统允许的最大文件描述符个数,然后全部 close 掉
  • 关闭之后我们要将文件描述符 0,1,2 重新定向到 “/dev/null”,防止新打开的文件的文件描述符为 0,1,2。

umask(0)

  • 设置文件掩码是为了不受父进程的 umask 的影响,能自由创建读写文件和目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxc_Huang

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值