只要一个进程的PCB还存在内存当中,哪怕此时该进程对应的代码和数据已经在磁盘当中,此时依然认为该进程仍然存在!
一、Linux进程的运行状态R
接下来我们看下面这个例子:
当我们执行这个程序的时候,我们认为该进程的状态应该是R,即一直运行,但是实际上却是S!
如果我们此时将打印注释会变成什么呢?
此时该进程则会一直变为运行态!
这是因为我们最初的代码包含printf函数,该函数需要访问我们对应的io设备,即显示器设备!此时设备不一致能直接进行打印,因此该进程很大概率需要等待!
R进程和R+进程的区别
-
R (Running/Runnable)
表示进程处于可执行状态,即正在CPU上运行或位于运行队列中等待调度。此时进程可能是后台进程,无法直接通过Ctrl+C
等终端信号中断。 -
R+ (Running & Foreground)
在R的基础上,+符号表示进程属于前台进程组。这类进程可以接收终端的输入(如键盘信号),例如通过Ctrl+C
终止或Ctrl+Z
暂停。
一般默认的进程是在前台运行的,如果我们想要通过使用后台运行,可以在其增加&;
此时如果我们想要杀死后台程序,ctrl + c已经无效了,只能通过kill -9 来杀死;
二、Linux进程的睡眠状态S
Linux中具体的阻塞状态就是S状态!
上面两个代码对应的进程都需要从对应的IO设备获取相应的资源!
大部分的情况下bash命令行的状态也是S!
因为要等待资源输入!(等待键盘输入对应的指令!)
S也被称为浅度睡眠 --- 随时可以对外界的动作做出具体的反应:可以唤醒或者kill
三、Linux进程的深度睡眠状态D(disk sleep)
不可中断睡眠状态(D - Uninterruptible Sleep)(deepseek)
- 含义:进程因关键操作(如磁盘I/O)进入深度休眠,不响应任何信号 。
- 特点:
- 常见于与硬件交互的短暂过程(如
vfork
后父进程等待子进程exit
) 。 - 无法通过
kill
终止,需等待操作完成或重启系统 。
- 常见于与硬件交互的短暂过程(如