进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。
在三态模型中,进程状态分为三个基本状态,即就绪态,运行态,阻塞态。在五态模型
中,进程分为新建态、就绪态,运行态,阻塞态,终止态。
新建态:进程刚被创建时的状态,尚未进入就绪队列
就绪态:进程具备运行条件,等待系统分配处理器以便运行。当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列
运行态:进程占有处理器正在运行
阻塞态:又称为等待(wait)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成
终止态:进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止时所处的状态。进入终止态的进程以后不再执行,但依然保留在操作系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。
Shell
是计算机操作系统中提供给用户进行交互的命令行解释器,它读取从终端输入的命令并将其传递给内核处理。在Linux系统中,常见的shell包括bash、zsh等。
终端(Terminal
)则是指向计算机上的一个物理设备,它通常显示一个命令行界面,让用户可以通过键盘输入Shell命令,并可以看到Shell命令输出的结果。
因此,可以说终端是
一个提供给用户输入和输出的界面
,而Shell
则负责接收用户输入的命令,并将相应的程序运行起来,是命令行的解释器
。在GUI环境下,一些模拟终端的软件也可以提供与Shell类似的功能。
注意
:终端也是一个进程,使用命令tty,可以知道当前运行终端的终端名称。结合着使用ps命令,可以查到终端名字对应的进程编号。
当在Linux中查看进程信息时,可以使用 ps 命令。它用于列出当前运行的所有进程以及它们的各种状态信息。
ps 命令最基本的用法是:ps
这将默认显示当前 shell 中所有的进程以及它们的状态信息。
其中,一些常用的选项包括:
-a: 显示一个终端的所有进程,包括其他用户的进程。
-x: 显示所有进程,无论它们是否与任何终端关联。
-u: 以用户为基础显示进程信息。
–sort: (里面是两个短杠,怕你们看不清)按照特定的列来排序输出,例如:–sort=-pcpu 表示按 CPU 使用率递减排序。
j:列出与作业控制相关的信息
以下是一些常见的 ps 命令选项及其含义:
nowcoder@nowcoder:~/Linux$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 225508 9468 ? Ss 3月11 0:08 /lib/systemd/systemd --system --deserialize 39
root 2 0.0 0.0 0 0 ? S 3月11 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 3月11 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 3月11 0:00 [rcu_par_gp]
USER
: 该进程所属用户的名称或 ID。
PID
: 进程的唯一标识符。
%CPU
: 进程当前使用 CPU 的百分比。
%MEM
: 进程当前使用系统内存的百分比。
VSZ
: 进程虚拟内存大小(单位 KB)。
RSS
: 进程当前使用物理内存的大小(单位 KB)。
TTY
: 与哪个终端设备关联(如果有的话)。
STAT
: 进程的状态代码。这些字母可以是 S(休眠)、R(运行)、I(空闲)等。
START
: 进程被启动的时间戳。
COMMAND
: 由用户指定的命令。
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
I 空闲进程
S(大写) 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
s 包含子进程
(+)位于前台的进程组
状态I 与 状态Z 的区别:
在Linux进程状态中,STAT字段中的I状态指的是空闲状态(Idle)。具体来说,I状态表示进程处于不活动状态,并且没有等待任何事件或者资源;
该状态通常与Zombie进程有所区别,因为后者已经退出,但是内核仍然保持了它的父进程ID和一些其他信息。在ps命令结果中,I状态下的进程通常被标记为I 。
在终端输入:tty
,系统就会告诉你当前你的终端是什么?(是哪个终端,终端编号)
作用:实时显示进程动态
可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔,在 top 命令执行后,可以按以下按键对显示的结果进行排序:
M 根据内存使用量排序
P 根据 CPU 占有率排序
T 根据进程运行时间长短排序
U 根据用户名来筛选进程
K 输入指定的 PID 杀死进程
作用:杀死进程
相关用法以及所需参数:
每个进程都由进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。
任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。
进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当前的进程组号。
进程号和进程组相关函数: