linux之进程管理
进程管理
1 进程基本概述
- 运行起来的程序,就叫进程
- 当程序运行之后,cpu会调度一块内存空间给程序使用, 以及进程运行的身份和权限
- 进程在运行过程中,服务器会以各种状态来表示当前进程的指标信息
- 线程是进程内的调度单位,进程可以包含一个或多个线程
1.1 进程和程序
- 程序是静态的,是以数据和指令集组合而成的可执行文件
- 进程是程序的动态,进程是存在生命周期的,随着程序的终止而终止
1.2 程序的生命周期
- 子进程在处理任务时,父进程会进入等待状态
- 子进程处理完成任务,会唤醒父进程回首子进程资源
- 如果子进程在处理任务时,父进程退出,而子进程未退出,子进程会变为僵尸进程
2 监控进程状态
- 查看进程的状态分两种
- 静态查看 ps
- 动态监测 top
2.1 ps -auxf 查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
-a显示所有终端机下执行的进程,除了阶段作业领导者之外
-u以用户为主的格式来显示进程状况
-x显示所有进程,不以终端机来区分
-f用ASCII字符显示树状结构,表达进程间的相互关系
2.2 ps 参数解释
参数 | 说明 |
---|---|
USER | 运行进程的用户 |
PID | 进程的PID号 |
%CPU | 进程占用cpu资源的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | process 使用掉的虚拟内存量 (Kbytes) |
RSS | process 占用的固定的内存量 (Kbytes) |
TTY | 进程运行的终端,如果是系统运行的,则显示 ?, tty1-tty6 是本地登录, pts/0 远程登录 |
STAT | 进程的目前状态 |
START | 进程启动时间 |
TIME | 进程实际使用cpu运行的时间 |
COMMAND | 启动时的指令信息 |
2.3 进程状态参数解释
STAT状态 | 说明 | STAT状态 符号 | 说明 |
---|---|---|---|
R | 进程运行 | s | 进程是控制进程, Ss进程的领导者,父进程 |
S | 可中断睡眠 | < | 进程运行在高优先级上,S<优先级较高的进程 |
T | 进程被暂停 | N | 进程运行在低优先级上,SN优先级较低的进程 |
D | 不可中断睡眠 | + | 当前进程运行在前台,R+该表示进程在前台运行 |
Z | 僵尸进程 | l | 进程是多线程的,Sl表示进程是以线程方式运行 |
2.4 top 参数解释
任务指标 | 说明 |
---|---|
Tasks: X total | 当前进程总数 |
X running | 正在运行的进程数 |
X sleeping | 睡眠的进程数 |
X stopped | 停止的进程数 |
X zombie | 僵尸进程数 |
%Cpu(s): 49.2 us | 系统用户进程使用CPU百分比 |
5.7 sy | 内核进程占用CPU百分比,内核是于硬件进行交互 |
ni | 调整过优先级进程占用百分比 |
45.2 id | 空闲CPU的百分比 |
0.0 wa | CPU等待IO完成的时间 |
0.0 hi | 硬中断,占的CPU百分比 |
0.0 si | 软中断,占的CPU百分比 |
0.0 st | 虚拟机占用物理CPU的时间 |
3 管理进程状态
- 进程异常需杀死
- 程序配置文件需更新
- 程序重启
命令 | 说明 |
---|---|
kill | -l 查看所有支持的信号 常用的3个信号 SIGHUP 重新加载配置文件 1 SIGKILL 强制杀死进程 9 SIGTERM 终止进程,默认kill使用该信号 15 |
killall | 命令用于杀死指定名字的进程 killall nginx |
pkill | 使用pkill踢出从远程登录到本机的用户 pkill -9 -t pts/1 |
4 管理后台进程
- 后台进程:当前终端执行脚本 加上&
- 前台进程:实时显示脚本执行过程
#在后台运行
[root@kylin-sp3v10 ~]# sleep 500 &
[1] 1613
#查看后台运行的作业列表
[root@kylin-sp3v10 ~]# jobs
[1]+ Running sleep 500 &
#bg %1 放置后台运行
[root@kylin-sp3v10 ~]# bg %1
-bash: bg: job 1 already in background
#fg %1 返回前台执行
[root@kylin-sp3v10 ~]# fg %1
sleep 500
#kill %1 终止后台运行
[root@kylin-sp3v10 ~]# kill %1
4.1 退出终端,持续后台运行操作
1. screen
# screen 指定一个任务名称后进入到一个新bash中
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate
#查看任务列表
[root@kylin-sp3v10 ~]# screen -list
There is a screen on:
1624.pts-0.kylin-sp3v10 (Detached)
1 Socket in /run/screen/S-root
# 平滑退出screen ctrl+a+d 不会终止任务,如果使用exit则退出
#screen -r 1624(进程号)
2. nohup
#nohup在运行过程中会在当前的目录生成一个nohup.out的临时文件
# 持续后台运行 关闭当前终端不影响
nohup wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate &
5 进程的优先级
- 在启动进程时,为不同的进程使用不同的调度策略
- nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
- nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU
PR NI
20 0
20 0
0 -20
0 -20
0 -20
0 -20
0 -20
20 0
20 0
20 0
rt 0
20 0
20 0
0 -20
20 0
20 0
0 -20
20 0
25 5
39 19
0 -20
0 -20
0 -20
#nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称
#开启vim并指定程序优先级为-5 并查看进程优先级
nice -n -5 vim &
# renice命令修改一个正在运行的进程优先级,语法格式 renice –n 优先级数字 pid
renice -n -10 1024
6 系统平均负载
w
uptime
top
Never try,never know