前面的 进程控制我们已经陆续的介绍啦,今天介绍一下孤儿进程,僵尸进程,还有守护进程
那他们到底是什么东西呢??先来个 视频了解一下博主的为人。
一.孤儿进程
父进程 先于 子进程结束,那子进程就成为了孤儿进程,父进程的资源被 init进程回收,没有结束的子进程就被init进程领养,init进程可以被看程是孤儿院的院长。
二.僵尸进程:
父进程 还在运行 ,子进程已经结束了【按常理来说,进程结束,他所开辟的资源都会被释放,当时这里 我要提醒大家,并不是所有的资源都会被释放的,内核中PCB(进程控制块)就不会被释放,虽说PCB大概占十几个字节,但是僵尸进程多了也会浪费很多资源的】, 注意:kill -9 是不会 回收 内核中残留的 PCB的, 它只是一个终止进程的命令 ,僵尸进程已经终止了 ,就是 内核中的PCB还没有回收。
思考:
1.为什么孤儿进程没有中父进程结束 就不会有 PCB的浪费呢?
因为父进程可以看成是一个树根,这个树根是有 init进程管理的,操作系统会自动的 回收进程结束后 残留在内核中的PCB.
2.怎么回收僵尸进程残留在内核中的PCB资源呢?【后面的章节提供代码实现,这里只做介绍】
方法1:可以通过 杀死父进程,让子进程变成孤儿进程,让init进程回收 子进程的PCB
方法2:可以修改进程的父进程,让子进程直接受init进程管理
方法3:可以通过 glibc提供的函数【wait, waitpid(通过信号触发回调函数(以及信号陷阱的处理))】来回收 子进程残留在内核中的PCB(常用的方式)
三.【重点】守护进程(Daemon)【后面提供守护进程的代码实现】
Daemon(精灵)进程, 是linux中的后台服务进程,通常独立于终端并且周期性的执行某种操作或者等待处理某些发生的事件。一般采用 以 d 结尾的名字。
linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互,不受用户登陆注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。
还有一件事:可以通过 .bashrc 中添加./daemon守护进程,这样的话开机就可以自动启动守护进程./daemon