1 进程介绍
1.1 进程概念
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位
1.2 系统进程状态
Linux系统进程的状态:
- 运行态:running
- 就绪态:ready
- 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
- 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
- 僵尸态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死 态 的子进程
1.3 进程优先级
普通进程的静态优先级:
- nice值::-20到19,对应系统优先级100-139或99
实时优先级(动态优先级):
- 99-0 值最大优先级最高
2 进程管理工具
2.1 pstree
查看进程树
格式:
pstree [OPTION] [ PID | USER ]
常用选项:
- -p 显示PID
- -T不显示线程数量,默认显示线程
范例:
[root@centos8 ~]$pstree -p user
bash(446775)───ping(446800)
2.2 ps
ps 即process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关 信息均保存在/proc/PID目录下的各文件中
格式:
ps [options]
常用选项:
BSD风格选项
- a 选项包括所有终端(tty)中的进程
- x 所有无终端(tty)的进程
- u 显示进程所有者的信息
- f 显示进程树
- k|--sort 对属性排序,属性前加 - 表示倒序
- o 属性... 选项显示定制的属性信息:pid、cmd、%cpu
UNIX风格选项
- -e 显示所有进程
- -f 显示完整格式程序信息
- -u 指定有效的用户ID或名称
GUN
- --help 查看帮助
- --sort 对属性排序相当于BSD k选项
ps输出属性
[root@centos8 ~]$ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 22 0.0 0.0 0 0 ? SN 2020 0:00 [ksmd]
[root@centos8 ~]$ps -ef
UID PID PPID C STIME TTY TIME CMD
root 10 2 0 2020 ? 00:02:42 [rcu_sched]
C : ps -ef 显示列 C 表示cpu利用率
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,会话(子进程)发起者
I:Idle kernel thread,CentOS 8 新特性
ni: nice值
pri: priority 优先级
rtprio: 实时优先级
psr: processor CPU编号
常用组合:
aux 相比-ef该选项显示cpu%值更详细
-ef
-eFH
范例:
[root@centos8 ~]$ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 2020 0:01 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 2020 0:00 \_ [rcu_gp]
按CPU利用率倒序排序centons6以下版本不支持
[root@centos8 ~]$ps axo pid,cmd,%cpu,%mem k -%cpu
PID CMD %CPU %MEM
334445 /usr/local/aegis/aegis_clie 0.5 3.1
1 /usr/lib/systemd/systemd -- 0.0 0.6
2 [kthreadd] 0.0 0.0
3 [rcu_gp] 0.0 0.0
范例:实现进程和CPU的绑定
[root@centos8 ~]#taskset --help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
2.3 prtstat
显示详细的进程信息
格式:
prtstat [options] PID ...
选项:
-r raw格式显示
[root@centos8 ~]$prtstat -r 446775
pid: 446775 comm: bash
state: S ppid: 446774
pgrp: 446775 session: 446742
tty_nr: 34817 tpgid: 446852
flags: 400100 minflt: 1320
cminflt: 2894 majflt: 0
cmajflt: 0 utime: 1
stime: 0 cutime: 0
cstime: 15 priority: 20
nice: 0 num_threads: 1
itrealvalue: 0 starttime: 1017091513
vsize: 24870912 rss: 1245
rsslim: 18446744073709551615 startcode: 94494540193792
endcode: 94494541273016 startstack: 140731806454160
kstkesp: 0 kstkeip: 0
wchan: 0 nswap: 0
cnswap: 0 exit_signal: 17
processor: 0 rt_priority: 0
policy: 0 delayaccr_blkio_ticks: 0
guest_time: 0 cguest_time: 0
2.4 nice和renice
nice
以指定的优先级来启动进程
格式:
nice [OPTION] [COMMAND [ARG]...]
选项:
- -n 指定优先级值,默认值为10
renice
调整正在执行进程的优先级
格式:
renice [-n] priority pid...
范例:
[root@centos8 ~]$nice -n -20 ping 127.1.1.1
[root@centos8 ~]$ps axo pid,cmd,nice | grep ping | grep -v grep
447048 ping 127.1.1.1 -20
2.5 pgrep
按照条件搜索进程,也可以使用ps 选项 | grep 'pattern'搜索
pidof可以根据程序名称查看进程pid
格式:
pgrep [options] pattern
常用选项:
- -u uid:生效者
- -U uid:进程发起者
- -p pid 显示指定进程的子进程
范例:
[root@centos8 ~]$pgrep -au user
447081 -bash
447115 bc
pidof查看pid
[root@centos8 ~]#pidof bash
19035 18813 18789 1251
[root@centos8 ~]#pidof ping.sh
[root@centos8 ~]#pidof -x ping.sh
19035
2.6 uptime
显示以下内容
- 当前系统时间
- 系统已经启动时间
- 系统在线用户数量
- 系统1分钟、5分钟和15分钟平均负载,建议超过5时告警
范例:
[root@centos8 ~]$uptime
18:04:35 up 117 days, 18:50, 3 users, load average: 0.00, 0.00, 0.00
[root@centos8 ~]$w
18:04:45 up 117 days, 18:51, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 49.118.73.132 16:26 0.00s 0.10s 0.00s w
root pts/1 49.118.73.132 16:28 12:05 0.02s 0.02s -bash
root pts/2 49.118.73.132 17:05 4:37 0.03s 0.00s bc
2.7 top
查看实时的进程状态
h或?可以查看帮助,q或esc退出帮助
-
排序
P:以占据的CPU百分比,%CPU
M:以占据内存的百分比,%MEM
T:累计占据CPU时长,TIME+
-
首部信息显示
uptime信息:l
tasks及cpu信息:t
cpu分别显示:1
memory信息:m
-
终止指定进程:k
-
保存文件:W
选项:
- -d # 指定刷新的时间间隔,默认为3秒
- -n # 刷新多少次以后退出
2.8 free
显示内存空间使用状态
格式:
free [OPTION]
常用选项:
- -b 以字节为单位
- -m 以MB为单位
- -g 以GB为单位
2.9 pmap
查看进程对应内存映射
格式:
pmap [options] pid [...]
cat /proc/PID/maps
范例:
#查看系统调用
[root@centos8 ~]$strace ls
execve("/usr/bin/ls", ["ls"], 0x7ffec1f150f0 /* 24 vars */) = 0
brk(NULL) = 0x55607ac10000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd1a4a9aa0) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=31690, ...}) = 0
mmap(NULL, 31690, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f96cc1c5000
close(3) = 0
openat(AT_FDCWD, "/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF211 3 >