进程状态
-
R (running)
- Linux 的运行状态(循环空语句)
-
S (sleeping)
- 阻塞状态 称为浅度睡眠(可以被唤醒)
- 死循环打印语句时
- 等待输入时
- 使用 sleep 函数时
-
D (disk sleep)
- 也是一种阻塞状态,称为深度睡眠
- 进程在等待磁盘写入完毕期间,这个进程不能被任何人杀掉,此时就处于深度睡眠。
- 不响应任何操作系统的请求
-
T (stopped)
- 暂停状态
- kill -19 PID 暂停进程指令
- kill -18 PID 继续进程指令
-
t (tracing stop)
-
X (dead)
进程终止了 -
Z (zombie) 僵尸进程
- 僵尸进程是指子进程已经终止(停止运行),但其父进程尚未调用
wait()
或类似的系统调用来获取子进程的终止状态。在这种情况下,子进程的进程描述符仍然保留在系统中,但它实际上已经不再执行任何代码,也不占用资源。这个进程仅存在于进程表中,等待其父进程来获取其退出状态。这种状态称为“僵尸”状态。 - 所以,僵尸进程的关键在于子进程已经结束,但父进程还没有对它进行“善后”处理。如果父进程调用
wait()
或waitpid()
,那么僵尸进程的资源就会被释放,真正从系统中消失。
- 僵尸进程的危害
- 僵尸进程是指子进程已经终止(停止运行),但其父进程尚未调用
孤儿进程
进程优先级
基本概念
-
是什么?
优先级解决对于一个资源谁先访问谁后访问,用来决策当前进程是先享受还是后享受这个资源。 -
为什么?
- CPU 只有一个,进程有多个,注定进程之间要竞争资源,所以进程之间有竞争性。操作系统必须保证进程之间的良性竞争,必须确认优先级。
- 如果进程长时间的不到 CPU 资源,该进程的代码长时间无法得到推进,就导致该进程的饥饿问题。(就相当于进程卡死了)
-
怎么办?
查看进程优先级
ps -l:输出当前终端的进程
ps -al:输出所有终端窗口的进程
PRI 和 NI
-
PRI:优先级
数字越小,优先级越高 -
NI:进程优先级的修正数据(nice 值)
范围:[-20,19] (可修改的范围) -
真正优先级:PRI+NI(通过修改 NI 就可以修改优先级)
常见问题
-
kill -l
输出 kill 的选项 -
暂停状态和睡眠状态的区别
-
什么情况下会使用暂停模式
-
如何父进程先退出,子进程继续运行,会发生什么?
-
为什么操作系统要领养父进程已经停止的进程呢?