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.运行状态
进程在运行队列中就可以理解为在运行状态。

2477

被折叠的 条评论
为什么被折叠?



