[Linux 高并发服务器] 进程状态的转换
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Linux 高并发服务器] 进程状态的转换相关的知识,希望对你有一定的参考价值。
[Linux 高并发服务器] 进程状态的转换
根据牛客的c++项目课程做笔记,图片和知识点均摘录自该课程
进程的状态转换
进程状态反映进程执行过程的变化,这些状态随着进程的执行和外部条件的变化而转换
三态模型
运行态
:进程占有处理器正在运行
就绪态
:进程具备运行条件,等待系统分配处理器以便运行,如果已经分配到除CPU外的资源,一旦获得CPU就立刻执行。在一个系统当中,处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列
阻塞态
:又称为等待(wait)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。注意,阻塞态不会直接变成运行态。
五态模型
相比三态模型多了两个状态
新建态
:进程刚被创建时的状态,尚未加入到就绪队列
终止态
:进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止所到达的状态。进程被终止后不再执行,但会保留在操作系统中善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程
进程相关的命令
查看进程的信息
ps aux
a
:显示终端上所有进程,包括其他用户的进程
u
:显示进程详细信息
x
:显示没有控制终端的进程
j
:列出与作业控制相关的信息(可以看父进程,进程组,会话的ID)
显示的是输入ps aux
瞬间的进程信息,并非动态的
USER
进程所属用户
PID
进程的ID
%CPU
CPU的使用
%MEM
内存的使用
VSZ
是常驻内存集(Resident Set Size),表示该进程分配的内存大小
RSS
表示进程分配的虚拟内存
TTY
进程所属的终端
STAT
状态
START
开始的时间
TIME
持续的时间
COMMAND
执行哪个命令产生的这个进程
ps ajx
PPID
父进程的ID
PGID
进程组的ID
SID
会话的ID
TPGID
tty process group ID for the process group leader貌似是终端进程组ID之类的(暂时不了解这玩意)
实时显示进程的动态
top
-d
指定显示信息更新的时间间隔
M
根据内存使用量排序
P
根据CPU占有率排序
T
根据进程运行时间长短排序
U
根据用户名字筛选排序
K
输入指定的PID杀死进程
杀死进程
kiil PID
发现如果杀死自己终端是不行的,需要加上参数-9强制杀死进程
-9
实际上就是KILL信息,可以通过kill -l
查看发现是第9个
kill [-signal] pid
kill -l 列出所有信号
kill -SIGKILL 进程ID
kill -9 进程ID
killall name 根据进程名杀死进程
进程号和相关函数
每个进程都由进程号来标识,类型为pid_t整型,进程号的范围是0~32767
进程号是唯一的但是可以重复使用,一个进程终止后,其进程号就可以再次使用。
任何进程(除了init进程)都是有另外一个进程创建的,该进程成为被创建进程的父进程对应的进程号就是父进程号(PPID)
进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID)默认情况下当前的进程号会当做当前的进程组号
pid_t getpid(void);//获取当前进程号
pid_t getppid(void);//获取当前进程的父进程号
pid_t getpgid(pid_t pid);//如果传None获取当前进程的进程组id,如果传进程号获取进程号的进程组ID
以上是关于[Linux 高并发服务器] 进程状态的转换的主要内容,如果未能解决你的问题,请参考以下文章