Linux 中的僵尸进程与孤儿进程

在介绍僵尸进程和孤儿进程之前我们先了解一下进程的几种状态
进程状态
1. R状态 进程要么在运行要么在运行队列中。
2. S状态 睡眠状态,进程在等待某事件完成(可被中断)
3. D状态 不可中断的睡眠状态(通常其在第等待IO结的束)
4. T状态 被停止的进程 (发送信号SIGSTOP停止进程 SIGCONT让进程继续运行)
5. X状态 进程已死 已被回收 kernel你的do_exit函数返回的状态。
6. Z状态 僵尸进程

其他几种进程状态我们很容易理解,那么什么是僵尸进程呢?
僵尸进程就是当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码,因为一直没有接受状态信息而造成一直存在于内存当中。

在详细说明僵尸进程之前我们首先介绍一个指令
ps指令,ps + 以下指令
aux :查看系统所有的进程数据
-A:所有的进程均显示出来
-a:不与terminal有关的所有进程
-u:有效用户相关的进程
-x:通常与a一起使用,可以列出较完整的信息
-l:较长、较详细地将该PID的信息列出

通过ps指令我们可以观察进程状态,但是仅仅观察进程状态我们还不能明白的知道什么是僵尸进程,下面我们再引入一个指令kill
kill -l显示所有kill下的信号
Linux 中的僵尸进程与孤儿进程_第1张图片
而这里我们只关注这几个信号
kill -1:SIGHUP启动被终止的进程,可让该PID重新读取自己的配置文件
-9:SIGKILL杀死进程状态(除了D)
-15:SIGTERM正常结束一个进程
-18:SIGCONT继续进程信号
-19:SIGSTOP暂停进程信号

这个时候让我们先模拟实现一个僵尸进程
Linux 中的僵尸进程与孤儿进程_第2张图片

现在让我们看看进程状态
Linux 中的僵尸进程与孤儿进程_第3张图片
我们可以清楚地看到,当停下mytest运行状态被停下之后父进程就变成了僵尸进程

那么下面让我们来看看孤儿进程是什么?
孤儿进程:一个父进程退出,而他的子进程还在运行,那么子进程将会成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养。

同样的,让我们去实现一下孤儿进程,来看看它的进程状态
Linux 中的僵尸进程与孤儿进程_第4张图片

输出结果
Linux 中的僵尸进程与孤儿进程_第5张图片
那这里就很明显了,孤儿进程已经被创建并且被进程号为1的进程init所收养

你可能感兴趣的:(学习)