文章目录
进程状态

进程的基本状态
进程的基本状态
1.创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),
向其中填写控制和管理进程的信息,完成资源分配。
如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
2.就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行。
3.执行状态:进程处于就绪状态被调度后,进程进入执行状态。
4.阻塞状态:正在执行的进程由于某些事件(Io请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。
在满足请求时进入就绪状态等待系统调用。
5.终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。
其他更多态
运行态: running
就绪态: ready
睡眠态: 分为两种,可中断: interruptable,不可中断: uninterruptable
停止态: stopped,暂停于内存,但不会被调度,除非手动启动
僵死态: zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程
运行(Running或R)
1.运行(Running 或 R)
状态描述: 进程正在CPU上执行或正在准备执行。只有一个进程可以真正处于正在执行状态,而其他准备执行的进程处于就绪状态。
特点: 这种状态的进程占用CPU时间片。多任务操作系统通过快速切换这些进程,使得用户感觉到多个进程在同时运行。
可中断睡眠(Interruptible Sleep 或 S)
2.可中断睡眠(Interruptible Sleep 或 S)
状态描述: 进程正在等待某个条件的满足,比如I/O操作的完成。当条件满足时,进程会被唤醒并进入就绪状态。
特点: 这种状态下的进程可以响应信号(如终止信号),从而被唤醒。
不可中断睡眠(Uninterruptible Sleep 或 D)
3.不可中断睡眠(Uninterruptible Sleep 或 D)
状态描述: 进程等待硬件条件的满足,如磁盘I/O操作的完成。这类进程不能被信号唤醒,必须等待操作完成。
特点: 由于进程在等待硬件资源,所以处于这种状态的时间通常较短。如果有进程长期处于该状态,可能表明系统存在硬件或驱动问题。
停止(Stopped 或 T)
4.停止(Stopped 或 T)
状态描述: 进程由于接收到SIGSTOP、SIGTSTP等信号而暂停执行。此状态通常由调试器(如GDB)或用户手动触发(如Ctrl+Z)。
特点: 停止的进程不会占用CPU资源,但仍保留在内存中。可以通过SIGCONT信号恢复执行。
僵尸(Zombie 或 Z)
5.僵尸(Zombie 或 Z)
状态描述: 进程已经终止,但其父进程尚未调用wait()等系统调用来回收其资源。僵尸进程保留在进程表中,直到父进程处理它。
特点: 僵尸进程不占用任何系统资源(如CPU、内存),但占用进程表条目。大量僵尸进程可能会耗尽进程表条目,影响系统的正常运行。
范例:僵尸态
[root@rocky ~]# bash
[root@rocky ~]# echo $BASHPID
2440
[root@rocky ~]# echo $PPID
2360
#将父进程设为停止状态
[root@rocky ~]# kill -19 2360
#杀死子进程,使其进入僵尸态
[root@rocky ~]# kill -9 2440
ps aux后可以看到父进程stat为Ts,子进程stat为Z+

终止僵尸态
#方法1:恢复父进程
[root@rocky ~]# kill -18 2360
#方法2:杀死父进程
[root@rocky ~]# kill -18 2360
我选择了恢复父进程,再次使用ps aux观察时,就没有僵尸进程了

状态转换
运行―—>就绪:
1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;
2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态;
就绪―—>运行: 运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU;
运行――>阻塞: 正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求;
阻塞——>就绪: 进程所等待的事件已经发生,就进入就绪队列;
以下两种状态是不可能发生的:
阻塞―—>运行: 即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取;
就绪——>阻塞: 就绪态根本就没有执行,谈不上进入阻塞态。
进程管理相关工具
Linux系统状态的查看及管理工具:
pstree、 ps、 pidof、 pgrep、 top、 htop、 glance、 pmap、 vmstat、 dstat
kill、 pkill、 job、 bg、 fg、 nohup
进程树pstree
man pstree
NAME
pstree - display a tree of processes
SYNOPSIS
pstree [-a, --arguments] [-c, --compact] [-h, --highlight-all, -Hpid, --highlight-pid pid] [-g] --show-pgids] [-l, --long] [-n, --numeric-sort]
[-N, --ns-sortns [-p, --show-pids] [-s, --show-parents] [-S, --ns-changes] [-t, --thread-names] [-T, --hide-threads] [-u, --uid-changes]
[-Z, --security-context] [-A, --ascii, -G, --vt100, -U, --unicode] [pid, user]
pstree -V, --version
DESCRIPTION
pstree shows running processes as a tree.
The tree is rooted at either pid or init if pid is omitted.
If a user name is specified, all process trees rooted at processes owned by that user are shown.
pstree可以用来显示进程的父子关系,以树形结构显示。
格式:
pstree [OPTION] [ PID | USER ]
常用选项:
-p 显示进程编号PID;
-T 不显示线程thread ,默认显示线程
-u 显示用户切换
-H pid高亮显示指定进程及其前辈进程
在centos8上使用dnf安装pstree

pstree -p
-p Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. -p implicitly disables compaction.

pstree -T
-T Hide threads and only show processes.


-u Show uid transitions.
Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name.

-h Highlight the current process and its ancestors.
This is a no-op if the terminal doesn't support highlighting or if neither the current
process nor any of its ancestors are in the subtree being shown.
-H Like -h, but highlight the specified process instead.
Unlike with -h, pstree fails when using -H if highlighting is not available.

进程信息ps
ps 即process state,可以显示进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中。
常用选项
a 选项包括所有终端中的进程
× 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程树,相当于 --forest
k |--sort 属性 对属性排序,属性前加 –表示倒序
o 属性....选项显示定制的信息 pid、 cmd、 %cpu、 %mem
L显示支持的属性列表
-c cmdlist指定命令,多个命令用,分隔
-L 显示线程
-e 显示所有进程,相当于-A
-f 显示完整格式程序信息
-F 显示更完整格式的进程信息
-H 以进程层级格式显示进程相关信息
-u userlist指定有效的用户ID或名称
-u userlist指定真正的用户ID或名称
-g gid或groupname指定有效的gid或组名称
-G gid或groupname指定真正的gid或组名称
-p pid 显示指pid的进程

最低0.47元/天 解锁文章
1422

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



