Linux进程管理常见命令pstree top
进程相关概念
内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
进程(process)定义
进程=程序+数据+进程控制块PCB(线性、索引、链表)
广义:是计算机中一个具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
狭义:是正在运行的程序的实例。
进程特点:①是一个实体,每个进程都有自己的地址空间(文本区、数据区、堆栈)。②是一个"运行中的程序"的副本,载入内存的活动的实体。是区别于程序是静态的一组指令的集合。③进程有生命周期,由操作系统来调度。④进程具有并发性和共享性等性质⑤进程对文件系统的访问权限取决于进程发起者和上下文语境决定
进程的创建
init:第一个进程(父进程)
进程三种重要状态和转换
1、运行态Running:正在被CPU调度执行
2、阻塞态Blocked:等待某种条件满足前,暂时无法运行。
3、就绪态Ready:所有资源已齐备,等待分配CPU立即执行(万事俱备,只欠CPU)
4、睡眠态:
可中断:interruptable
不可中断:uninterruptable
5、停止态:stopped,暂停于内存,除非手动启动,不会被调度
6、僵死态:zombie,
进程类型:
1、守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
2、前台进程:与终端相关,通过终端启动的进程
两者可相互转化
A、CPU-Bound:CPU密集型,非交互
B、IO-Bound:IO密集型,交互
I、系统进程:Kernel 系统空间
II、用户进程:用户空间
进程在系统中用唯一的ID(非负)标识,进程结束后ID被其他进程重用。
PID 0:调度进程,内核一部分,系统进程
PID 1: init进程,普通用户进程,超级用户特权运行
PID 2: 页守护进程,虚拟存储分页操作
进程调度方式及算法
1、抢占式:
2、非抢占式:
先来先服务(FCFS)和短作业优先、高优先权优先、基于时间片的轮询、多级反馈队列算法
线程
操作系统调度的基本单位;
不拥有资源,共享同一进程资源,切换速度快开销小;
一个进程至少有一个线程,且是它的主线程
LRU算法
Least Recently Used最近最少使用,根据历史访问记录来淘汰数据,核心思想是“如果数据最近被访问过,将来被访问的几率也更高”。采用链表保存缓存数据:新数据插到表头,当命中将数据移至表头,表满淘汰尾部数据。
进程优先级
实时优先级:0-99
非实时优先级:100-139
nice值:-20~19 共40级,值越高,优先级越低;静态优先级,renice 修改才会变;
静态优先级100~139
进程默认启动时的nice值为0,优先级为120
只有root用户才能调整nice值来提高优先级
renice -10 ping 127.0.0.1
chrt 可以调整实时优先级
线程
1、单个进程中执行中每个任务就是一个线程,线程是进程中执行运算的最小单位。
2、一个进程可以拥有多个线程,一个线程只能属于一个线程
3、线程没有地址空间,线程包含在进程的地址空间中。
4、操作系统通过多线程并发处理,来提高事务效率。
IPC进程间通信
同一主机:pipe | 管道
socket 套接字
signal 信号
shm 共享内存
不同主机:
socket IP+port 网络通信
RPC 远程过程调用
MQ 消息队列的
系统管理工具
Linux系统状态查看、管理主要工具有:pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup
pstree命令
以树状图的方式直观展示进程之间的父子关系。
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
常用选项:
-a 显示每个程序的完整指令,包含路径、参数等
-c 禁用相同子树的压缩。默认相同子树会被压缩精简显示。
-n 按进程PID数值从小到大排序(相同父进程的子进程也会依此排序),默认按进程名asccii码值排序
-p 显示进程和PID
pstree -ps #PID :显示该PID进程的父子关系(centos7独有)
-u 显示用户名
-g 显示PGIDs。如果同时PIDs和PGIDs,则PIDS优先(centos7独有)
ps命令
ps [OPTION]
report a snapshot of the current processes
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
支持三种风格的OPTION:
UNIX选项 ~]#ps -a
BSD选项 ~]#ps a
GNU选项 ~]#ps --user
1、ps选项:默认什么都不加 ps ,显示当前终端中的进程
a 包括所有终端中的进程
x 包括不链接终端的进程(跟终端无关的,如有些开机自动运行的进程)
u 显示进程所有者的信息
f 显示进程树,相当于--forest(可以看到父进程,效果不如pstree -p 直观)
k|--sort 属性 对属性排序,属性前加- 表示倒序
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem (只显示自己关心的指定信息)
L 显示支持的属性列表 (eg:ps L 表示ps支持哪些属性给你打印出来)
ps axo pid,%cpu,%mem,cmd --sort %cpu效果等同
ps axo pid,%cpu,%mem,cmd k %cpu
2、PS常见选项
-C cmdlist 指定命令,多个命令用,分隔 (ps hello.sh例子中,使用/bin/bash hello.sh方式运行或者hello.sh脚本没有蛇棒机制的第一行。使用ps -C hello.sh 去查看进程是否有hello.sh这个命令时就查询不到。)
-L 显示线程 (注意与上面ps L 区别,这里是 ps -L)
-e: 显示所有进程,相当于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
-u userlist 指定有效的用户ID或名称
-U userlist 指定真正的用户ID或名称
-g gid或groupname 指定有效的gid或组名称
-G gid或groupname 指定真正的gid或组名称
-p pid 显示指pid的进程
--ppid pid 显示属于pid的子进程
-M 显示SELinux信息,相当于Z
如:vmtoolsd(6193,6193)───{vmtoolsd}(6262,6193),这样有花括号的就是线程,小括号的就是进程。
3、PS输出属性
VSZ:Virtual memory SiZe,虚拟内存集,线性内存
RSS:ReSident Size, 常驻内存集
STAT:进程状态
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l : 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
ps axo pid,cmd,user,ruser,nice,pri,rtprio 比较系统优先级,实时优先级,nice优先级,容易混淆
常用组合
ps aux | axo | -ef | -eFH | -eo
结合watch命令实时监控:watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
结合grep命令:ps aux | grep httpd
pgrep命令
增强版的 "ps 选项 | command",功能更丰富,支持:
①预定义模式:
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
②按确切的程序名称
pgrep pidof bash
uptime和w
uptime:显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、15分钟的平均负载,一般不会超过1)
w:比uptime更丰富的系统状态信息
常用选项
-f 开启或关闭显示用户从何处登入系统。
-h 不显示各栏位的标题信息列。
-l 使用详细格式列表,此为预设值。
-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
-u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。
04:27:43 up 7:02, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.111.1 02:08 7.00s 0.27s 0.02s w
格式解读:
第一行含义同uptime
第二行:
USER:显示登录系统的用户名
TTY:用户登录的终端类型/号
FORM:显示用户从何处登录的,本地登录(centos6是-;centos7是空的),远程登录则显示远程IP或主机名
LOGIN@:用户登录系统是在什么时间
IDLE:用户闲置时间。一旦执行操作,此计时器将重置。
JCPU:以终端的代号区分显示,表示该终端所有相关的进程(process)执行时所消耗的cpu时间。每当进程结束就停止计时,开始新的进程则会重新计时。
PCPU:表示CPU执行程序耗时。
WHAT:用户正在执行的程序名
top命令
动态显示系统状态信息
VIRT:virtual memory usage 虚拟内存
RES:resident memory usage 常驻内存
SHR:shared memory 共享内存
1、栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
2、排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
3、选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
-H 线程模式,示例:top -H -p `pidof mysqld`
4、 htop命令:EPEL源
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
子命令:
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树