进程的状态
进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。
三态模型
在三态模型中,进程状态分为三个基本状态,即就绪态,运行态,阻塞态。
- 运行态:进程占有处理器正在运行
- 就绪态:进程具备运行条件,等待系统分配处理器以便运行。当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列
- 阻塞态:又称为等待(wait)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成
五态模型
在五态模型中,进程分为新建态、就绪态,运行态,阻塞态,终止态。
- 新建态:进程刚被创建时的状态,尚未进入就绪队列
- 终止态:进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止时所处的状态。进入终止态的进程以后不再执行,但依然保留在操作系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。
进程的相关命令
查看进程
ps aux / ajx
a:显示终端上的所有进程,包括其他用户的进程
u:显示进程的详细信息
x:显示没有控制终端的进程
j:列出与作业控制相关的信息
ps aux
命令的瞬间的进程信息,并非动态的
USER
进程所属用户
PID
进程的ID
%CPU
CPU的使用
%MEM
内存的使用
VSZ
是常驻内存集(Resident Set Size),表示该进程分配的内存大小
RSS
表示进程分配的虚拟内存
TTY
进程所属的终端
STAT
状态
PPID
父进程的ID
PGID
进程组的ID
SID
会话的ID
START
开始的时间
TIME
持续的时间
COMMAND
执行哪个命令产生的这个进程
实时显示进程动态
top
可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔,在 top 命令执行后,可以按以下按键对显示的结果进行排序:
M :根据内存使用量排序
P :根据 CPU 占有率排序
T :根据进程运行时间长短排序
U :根据用户名来筛选进程
K :输入指定的 PID 杀死进程
杀死进程
kill [-signal] pid
kill –l 列出所有信号
kill –SIGKILL 进程ID
kill -9 进程ID
killall name 根据进程名杀死进
杀死自己终端是不行的,需要加上参数-9强制杀死进程,-9实际上就是KILL信息,可以通过kill -l查看发现是第9个
首先写一个死循环的输入函数,之后执行,程序会一直输出字符串
为了终止这个死循环,我们需要杀死这个进程,打开另一个终端输入命令ps aux
查看进程ID,接着输入命令kill -9 PID
,可以看到进程已被终止
进程号和相关函数
- 每个进程都由进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。
- 任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。
- 进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当前的进程组号。
- 进程号和进程组相关函数:
pid_t getpid(void);
pid_t getppid(void);
pid_t getpgid(pid_t pid);
当我们在当前进程中执行a.out时,可以看到此时a.out的PPID就是当前进程的PID