【Linux 系统】进程状态与优先级❗

1.进程状态

//进程状态可以把它理解为 task_struct 中的一个 struct 结构
static const char * const task_state_array[] = {
"R (running)", /* 0 */  运行态
"S (sleeping)", /* 1 */ 睡眠 
"D (disk sleep)", /* 2 */ 不可中断睡眠
"T (stopped)", /* 4 */  停止状态 (程序打断点,然后跳到断点位置就是停止状态)
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */	死亡状态(一般很难看到)
"Z (zombie)", /* 32 */  
};

2.睡眠状态

  • S状态可以理解为睡眠状态

举个例子:一个程序中,如果有 printf()打印的语句,且printf()一直在循环重复打印的话,可以把这个进程状态理解为 S状态。
原因:因为printf()可以理解为向外设(屏幕)打印信息,但是外设输出信息是很慢的相较于CPU来说,所以一直在等待外设资源,可以把它理解为睡眠状态。

  • 睡眠有可中断睡眠不可中断睡眠之分

可中断睡眠:就是该进程处于S睡眠状态,但是我们可以使用 ctrl + c来把该进程终止。
不可中断睡眠:该进程处于S睡眠状态,我们不能对它进行终止,只能由它自己进行唤醒。(为什么要有不可中断睡眠呢? 因为有的进程可能是在进行 IO 操作,例如正在向磁盘里面写数据,此时可能会处于S状态,因为它要等待磁盘读写完毕,如果操作系统可以直接把该睡眠状态的进程直接终止的话,可能造成的影响极大。)

3.僵尸进程

进程 = 内核数据结构(task_struct) + 代码和数据;

僵尸进程理解:程序已经运行完毕,代码和数据已经被回收,子进程在task_struct中记录自己的退出信息,等待父进程进行读取。

如果没有父进程进行读取,僵尸进程会一直存在。
不能使用 kill指令来杀僵尸进程进行结束(可以理解为僵尸进程已经是一个死的进程了,再杀它无效)

在命令行终端运行的进程,它的父进程是bash,所以最终bash会自动回收僵尸进程。

4.孤儿进程

父进程比子进程先行运行完毕,父进程先退出。孤儿进程由1号进程(操作系统本身)来进行领养。

5.运行状态

进程在运行队列中就可以理解为在运行状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

每天进步1%~加油

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值