进程管理
一、什么是进程,什么是线程
1、什么是程序
一般情况下,代码、安装包等全部都是应用程序
2、什么是进程
应用程序运行起来的能够提供某种服务的实例
3、什么是线程
进程中处理具体事务的最小单位
一个进程中,至少有一个线程,可以有多个线程(多线程)
二、进程的三种状态
就绪态:应用程序等待CPU处理
运行态:CPU正在处理应用程序
阻塞态:CPU运行完毕后,应用程序进入阻塞态
三、查看进程
ps : 获取当前系统进程的命令
-a : 显示一个终端的所有进程
-u : 选择有效的用户id或者时用户名
-x : 显示没有控制终端的进程,同时显示各个命令的具体路径
ps -a -u -x 可简写为 ps -aux
-aux 一般情况下是一起使用,相同的参数组合还有一个 -ef 参数
-ef 和 -aux 之间的区别?
-ef : 会打印出父级PID
-aux : 会打印出CPU、内存相关的使用情况
四、ps详解+
[root@localhost opt]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 43696 4044 ? Ss Oct12 0:02 /usr/lib/systemd/
USER : 运行当前进程的用户
PID : 进程的编号(ID)
%CPU : CPU占用率
%MEM : 内存占用率
VSZ : 应用程序向系统申请的内存(虚拟内存)单位:kb(liiobytes)
VSZ是指已分配的线性空间大小,这个大小通常并不等于程序实际用到的内存大小,产生这个的可能性很多。比如内存映射,共享的动态库,或者向系统申请了更多的堆,都会扩展线性空间大小
RSS : 应用程序实际上使用的大小(实际内存)单位:kb(liiobytes)
RSS是Resident Set Size,常驻内存大小,即进程实际占用的物理内存大小
TTY : 应用程序正在使用的终端(?代表后台运行,也就是说不占用任何终端)
tty终端 : 操作系统终端
pts终端 : 虚拟终端
STAT : 进程的状态
R : 正在运行状态(正在使用CPU)
S : 可中断睡眠状态(一直不使用CPU)
D : 不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒-->执行的IO操作得不到硬件设备的响应
T : 停止的进程
Z : 僵尸进程
X : 死掉的进程(无法观察)
< : 优先级较高的进程
N : 优先级较低的进程
s : 包含子进程
+ : 表示在前台运行的进程
l : 代表以线程的方式运行,即多线程
| : 管道符号,代表多进程
知识储备:
nice : 设置进程的优先级
-n : 设置具体的进程优先级
-20~20 : 数字越大优先级越小
案例:nice -n -15 sleep 100
START : 进程开始的时间
TIME : 进程占用CPU的总时间
COMMAND : 进程运行的命令
带[]号的表示内核态进程
不带[]号的表示用户态进程
五、top命令
实时查看进程的命令
5.1、基本参数
默认情况下,top命令是3秒刷新一次
-d : 指定刷新的频率(后跟时间)
-p : 查看指定进程的信息(后跟PID号)
-u : 查看指定用户的进程(后跟用户名)
-n : 查看指定top次数的信息
[root@localhost ~]# top
[root@localhost ~]# top -d 1 # 1秒刷新一次
[root@localhost ~]# top -d 1 -p [PID号] # 进程的pid
[root@localhost ~]# top -d 1 -p `pgrep nginx | head -1`
[root@localhost ~]# top -d 1 -p `pgrep sshd | head -1`,33 # 查看sshd以及pid为33的进程
[root@localhost ~]# top -d 1 -u nginx # 查看指定用户进程
[root@localhost ~]# top -b -n 2 > top.txt # 将2次top信息写入到文件
5.2、系统整体统计信息
top - 11:35:39 up 1 day, 25 min, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995676 total, 796276 free, 109180 used, 90220 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 763052 avail Mem
up :启动
up左边代表当前的时间
up右边代表运行了多长时间
down :停止
load average :系统负载
load average: 0.86, 0.56, 0.78 CPU 1分钟,5分钟,15分钟平均负载
us :用户态进程占用cpu时间的百分比
sy :内核态进程占用cpu时间的百分比
ni :代表有限被调度的进程占cpu时间的百分比
id :cpu空闲的百分比
wa :cpu等待io的百分比
hi :硬件中断,处理硬件中断所占用CPU的时间
si :软件中断,处理软件中断所占用CPU的时间
st :被偷走的cpu
5.3、进程信息
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out(当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN)
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来,因为内存充裕了,大家就没必要合租内存了
DATA
1、数据占用的内存。如果top没有显示,按f键、然后用空格选中DATA项目、然后按q则可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
5.4、top运行中可以通过top的内部命令对进程的显示方式进行控制
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载
s 改变画面更新频率
1(数字1) 展开CPU详情
m 改变内存的显示样式
h|? 帮助
< 向前
> 向后
z 彩色
5.5、进程信号
1、什么是信号
表示信息的物理量。简而言之,操作发出信号指令,进程根据指令执行的一种沟通方式
2、kill命令
kill就是发送信号的命令
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
3、HUP信号
重载
id : 1
完整的名字:SIGHUP
作用:
更新进程的配置
4、INT、QUIT和TSTP 终止信号
INT信号就是ctrl+c 停止进程
QUIT信号就是ctrl+\ 终止进程
TSTP信号就是ctrl+z 中断信号
5、KILL和TERM
KILL :杀死信号(直接回收内存,强制剥离CPU)
TERM :终止信号
6、CONT和STOP 恢复和暂停
CONT 恢复
STOP 暂停
知识储备:
$$ :打印当前进程的PID
kill -9 pid
kill -s SIGKILL pid
6、查看网络状态
安装网络调试工具
yum install net-tools
[root@von ~]# netstat -tnlp # 查看正在监听的,且使用tcp协议的进程
-t tcp协议
-u udp协议
-l listen
-p PID/Program name
-n 不反解,不将IP地址解析为主机名,不将端口解析成协议名(80 ---> http)
7、僵尸进程和孤儿进程
僵尸进程:
1、进程
2、进程的生命周期已经结束
3、进程依然占着PID不释放
孤儿进程:
1、孤儿进程的父进程已经结束,而子进程还在运行
2、在没有父进程的情况下,被操作系统进程(pid=1)接收