16.1 什么是进程(process)
程序(program):指二进制程序,放置在存储媒介(如硬盘,光盘,磁带等),以物理文件形式存在,静态概念,是保存在磁盘上的一系列文件
进程(process):程序被触发后,执行者的权限与属性、程序的代码与所需数据都会被加载到内存中,操作系统给予一个标志符(PID),可以说进程就是一个正在运行的、动态的程序
线程:一个程序包括一个或多个进程
线程是CPU资源分配的最小单元
线程需要的资源更少,可以看做是一种轻量级的进程
线程会共享进程中的内存,线程也有独立的空间(栈、程序计数器)
线程相互通信更加方便
子父进程:进程彼此之间具有关联性,被父进程触发的命令就是子进程,比如下图3188356是3548179的父进程,第2个bash是从第1个产生的
如果某个进程无法关闭或删除,可能是父进程又生成了一个,可以检查它的父进程,然后删掉
[root@host-192-168-177-101 ~]# ps -l | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 3188356 3188347 0 80 0 - 29158 do_wai pts/0 00:00:00 bash
4 S 0 3548179 3188356 0 80 0 - 29123 do_wai pts/0 00:00:00 bash
服务(daemon):常驻内存的进程,包括系统或网络服务,比如crond,named
16.2 任务管理(job control)
bash任务管理限制
1)这些任务所触发的进程必须来自shell的子进程(只管理自己的bash)
2)前台:可以控制与执行命令的环境叫做前台的任务(foreground)
3)后台:可以自动执行的任务,无法使用[Ctrk] + c终止,可以使用bg,fg调用任务
4)后台中执行的进程不能等待terminal或shell的输入
&:将命令丢在后台执行
# 比如把打包任务放在后台
# tar -zpcf /tmp/etc.tar.gz /etc &
nohup:系统注销或者脱机后也能继续任务的执行
写法:nohup [命令与参数] &,没加&就是在前台执行,加上就是后台
jobs:查看当前的后台任务状态
-l:列出PID
-r:列出后台run的任务
-s:列出后台stop的任务
[tecs@host-192-168-30-156 ~]$ jobs -l
[1]- 133203 Stopped vim ifcfg-bond0
[2]+ 134172 Stopped (signal) top
上面表示有2个后台任务并且被stopped,使用fg时,[2]会被拿到前台处理
fg:将后台任务拿到前台处理
[tecs@host-192-168-30-156 ~]$ fg # [2]被拿到前台
[tecs@host-192-168-30-156 ~]$ fg %1 # %num就是指定取出的号码,比如[1]
bg:让任务在后台变成运行中
bg %num可以指定号码
kill:管理后台中的任务
写法:kill -signal %jobnumber
-l :列出目前kill可以使用的signal有哪些
signal:
-1:重新读取一次参数的配置文件
-9:立即强制删除一个任务
-15:正常的进程方式终止一项任务
16.3 进程管理
===进程查看===
ps:查看进程情况
写法:ps aux/ps -lA #查看系统所有的进程
ps axjf #连同部分进程数
#仅查看自己的bash相关进程
[root@host-192-168-30-156 tecs]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 0 4816 4813 0 80 0 - 51608 poll_s pts/3 00:00:00 sudo
4 S 0 4817 4816 3 80 0 - 29091 do_wai pts/3 00:00:00 bash
0 R 0 4881 4817 0 80 0 - 38312 - pts/3 00:00:00 ps
F:代表进程标志flag,说明这个进程的权限:4表示进程权限是root,1表示此子进程只执行复制(fork),没有实际执行(exec)
S:进程的状态(R:运行,S:睡眠,D:睡眠且不可唤醒,T:停止状态,Z:僵尸状态,已经终止但是无法删除出内存)
PRI/NI:Priority/Nice的缩写,代表此进程被执行的优先级,越小越好
ADDR/SZ/WCHAN:进程在内存的地址/用掉多少内存/进程是否运行(【-】代表正在运行)
TTY:登陆者的终端位置,远程登录是pts/3
TIME:进程执行花费CPU的时间
CMD:具体的命令
[root@host-192-168-30-156 tecs]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.6 0.0 60804 13236 ? SNs Jul25 265:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S Jul25 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul25 4:53 [ksoftirqd/0]
VSZ:进程用掉的虚拟内存(KB)
RSS:进程占用的固定内存(KB)
STAT:即ps -l的S
top:动态查看进程的变化
-d:后面接数字,代表进程界面更新的描述,默认5秒
-b:批量的方式执行
-n:与-b搭配,执行几次top的输出结果
-p:可指定某个PID进行检测
top执行过程中还可以使用按键命令
P:按照CPU使用排序
M:以Memory排序
N:以PID排序
T:进程使用时间排序
r:基于某个PID新的nice值
[root@host-192-168-30-156 tecs]# top -d 2
top - 14:13:30 up 11 days, 5:39, 4 users, load average: 0.21, 0.26, 0.31
Tasks: 877 total, 1 running, 876 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st, 99.4 id_exact, 0.0 hi_exact, 0.0 irq_exact
KiB Mem : 39436160+total, 38492886+free, 7249556 used, 2183196 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 38524627+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7516 root 39 19 0 0 0 S 1.5 0.0 2611:24 kipmi0
112202 root 20 0 162928 3224 1616 R 1.0 0.0 0:00.16 top
16326 root 20 0 191380 9560 3632 S 0.5 0.0 131:57.06 zxdvs_guard.py
1 root 30 10 60804 13236 4200 S 0.5 0.0 265:51.96 systemd
第一行:表示当前时间14:13:30,开机11天5小时39分,以及登录系统的人数4个,系统在1,5,15分钟的平均任务负载是0.21, 0.26, 0.31(ps,值最好小于1)
第二行:代表目前进程的总数和各状态的数量
第三行:显示CPU的整体负载,wa代表I/O wait,多内核可以按下【1】切换成不同CPU的负载率
第四、五行:目前物理内存与虚拟内存(Mem/Swap)情况
第六行:进程显示的具体状态
# 将top的信息执行2此,并输出到/tmp/top.txt
[root@host-192-168-30-156 tecs]# top -b -n 2 > /tmp/top.txt
# 获取自己的bash PID,并持续查看top
[root@host-192-168-30-156 tecs]# echo $$
4817
[root@host-192-168-30-156 tecs]# top -d 2 -p 4817
top - 14:22:53 up 11 days, 5:48, 4 users, load average: 0.11, 0.17, 0.25
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.1 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st, 98.7 id_exact, 0.0 hi_exact, 0.1 irq_exact
KiB Mem : 39436160+total, 38493504+free, 7242984 used, 2183576 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 38525228+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4817 root 20 0 116364 3008 1704 S 0.0 0.0 0:00.08 bash
pstree [ -A | U ] [ -up ]
-A:进程树之间用ASCII字符链接
-U:以Unicode链接
-p:同时列出进程PID
-u:同时列出进程的所属账号
===进程管理===
kill -signal PID
killall [-iIe] [command name]
-i:删除时询问
[root@host-192-168-30-156 tecs]# killall -i -9 bash
Signal bash(4817) ? (y/N) n
nice:新执行的命令即基于新的nice值
-n:后面接一个数值,范围-20~19
# 给一个nice值-5,并用于执行vim
[root@host-192-168-30-156 tecs]# nice -n -5 vim &
[1] 212702
[root@host-192-168-30-156 tecs]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 0 4816 4813 0 80 0 - 51608 poll_s pts/3 00:00:00 sudo
4 S 0 4817 4816 0 80 0 - 29091 do_wai pts/3 00:00:00 bash
4 T 0 212702 4817 0 75 -5 - 37252 do_sig pts/3 00:00:00 vim
0 R 0 212804 4817 0 80 0 - 38312 - pts/3 00:00:00 ps
[1]+ Stopped nice -n -5 vim
[root@host-192-168-30-156 tecs]# kill -9 %1 #记得删除
# 原本vim默认是80,现在各减了5
renice:重新调整已存在进程的nice
renice [number] PID
[root@host-192-168-30-156 tecs]# renice -5 14836
===查看系统资源信息===
free:查看内存使用情况
-b/k/m/g/h:显示单位
-t:最终结果显示total
-s:实时刷数据,后面接数字n,代表n秒刷一次
-c:刷数据的次数,后面接n
uname:查看系统与内核信息
-a:所有系统的信息
netstat:追踪网络或socket文件
后面学习
vmstat:检测系统资源变化
# 统计目前CPU状态,每秒一次,一共3次
[root@host-192-168-30-156 tecs]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io--- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 384934080 319948 1864328 0 0 117 135 0 0 0 1 89 11 0
1 0 0 384933792 319948 1864328 0 0 0 0 2004 1699 0 0 100 0 0
1 0 0 384933504 319948 1864328 0 0 0 36 3783 2521 0 0 99 0 0
procs | memory | swap | io | system | cpu | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r | b | swpd | free | buff | cache | si | so | bi | bo | in | cs | us | sy | id | wa | st |
3 | 0 | 0 | 384934080 | 319948 | 1864328 | 0 | 0 | 117 | 135 | 0 | 0 | 0 | 1 | 89 | 11 | 0 |
等待 运行数 |
不可被唤醒 的进程数量 |
虚拟内存 使用量 |
未被使用 内存 |
用于缓存 存储器 |
用于 高速存储 |
由磁盘读入 的区块数量 |
写入到磁盘 的区块数量 |
非内核层 使用CPU |
内核层使用 CPU状态 |
闲置的 状态 |
等待I/O耗费的 CPU的状态 |
被虚机使用 CPU状态 |
si/so:数据如果太大,表示内存中的数据经常在磁盘与内存之间传输,系统极差
in/cs:数据大表示系统与外接设备的沟通频繁,接口包括磁盘,网卡
# 系统上所有磁盘的读写状态
[root@host-192-168-30-156 tecs]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 422 0 21536 1011 0 0 0 0 0 0
sdb 422 0 21536 947 0 0 0 0 0 0