进程管理
Posted Greenxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程管理相关的知识,希望对你有一定的参考价值。
进程管理
进程概述
什么是进程?
一个正在运行的程序
进程与程序的区别
1.程序是数据和指令的集合,是一个静态的概念,比如/bin/ls、/bin/cp等二进制文件,可以长期存在系统中。
2.进程是一个程序的运行过程,是一个动态概念,进程是存在生命周期概念的,也就是说进程会随着程序的终止而销毁,不会永远在系统中存在。
进程的生命周期
1.用户发起请求
2.父进程会fork出子进程,子进程会继承父进程大部分的属性,如:文件描述符等,处理任务
3.子进程在处理任务的过程中,父进程是一个wait状态,等待子进程
4.正常结束
5.非正常结束
- 僵尸进程 :子进程先结束,父进程没有及时回收子进程的占用资源。
- 孤儿进程 :父进程先结束,子进程没有父进程的管理。
僵尸进程
子进程处理任务过程中,子进程比父进程先结束,父进程没有回收子进程的资源,此时的子进程就称为”僵尸进程”。
#产生原因
子进程的结束和父进程的运行是异步的,父进程永远不知道子进程什么时候结束。子进程在结束时,父进程繁忙来不及wait子进程,则会导致,子进程变成僵尸进程。
孤儿进程
父进程比子进程先结束,子进程还在执行任务,没有父进程管理.此时的子进程就称为”孤儿进程”。
#产生原因
子进程的结束和父进程的运行是异步的,父进程永远不知道子进程什么时候结束。当父进程正常完成工作或其他原因被终止,则会导致,子进程变成孤儿进程。
监控进程状态的命令
ps
静态查看当前的进程状态
ps [-option] [argument]
## 常用选项组合
[root@xtt <sub>]# ps -ef
[root@xtt </sub>]# ps aux
a:查看所有与终端相关的进程,由终端发起的进程
u:显示进程的管理用户
x:查看所有与终端无关的进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 127888 6512 ? Ss 09:02 0:01 /usr/lib/systemd/systemd --switche
root 2 0.0 0.0 0 0 ? S 09:02 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:02 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 09:02 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 09:02 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 09:02 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 09:02 0:00 [rcu_sched]
USER:该进程的管理用户
PID:进程号
%CPU:该进程占用CPU的百分比
%MEM:该进程占用内存的百分比(虚拟内存+物理内存)
VSZ:该进程占用虚拟内存的大小
RSS:该进程占用物理内存的大小
TTY:
?:由内核发起的进程
tty:虚拟机上的终端进程
pts/N:远程连接工具的终端进程
STAT:进程运行的状态
D:无法终止的休眠状态(通IO的进程)***<strong>
R:正在运行状态</strong>*<strong>
S:处于休眠状态</strong>*<strong>
Z:僵尸进程 zombie</strong>*<strong>
+:在前台运行 </strong>***
<:优先级高的进程
N:优先级低的进程
L:有些数据页被锁进内存的进程
s:父进程,在它下面有子进程
l:以线程的方式运行
|:存在多进程的进程
W:进入交换内存的进程(swap,centos7见不到)
X:死掉的进程(少见)
START:进程开启的时间
TIME:该进程占用cpu的时间
COMMAND:进程的名字或进程的命令
[]:内核态进程
没[]:用户态进程
# 如果后台有被暂停的进程(ctrl+z)
## 查看所有被暂停的进程
[root@web01 ~]# jobs
[1]- Stopped vim 1.txt
[2]+ Stopped ping baidu.com
bg:让暂停的进程运行起来,后面加数字,就可以运行第几个被暂停的进程(默认是最后一个)
fg:是把后台暂停的进程,调到前台运行,后面加数字,可以将第N个进程调到前台运行(默认是最后一个)
ps 常用方式
# 1.根据%CPU将进程进行排序
[root@xtt yum.repos.d]# ps aux|sort -k 4
[root@xtt yum.repos.d]#ps aux --sort=-%cpu -降序 +升序
[root@xtt ~]# ps aux --sort=-%mem 根据%mem将进程进行排序
# 2.自定义显示字段
o:自定义显示字段
[root@web01 ~]# ps axo pid,%cpu,command,user
# 3.显示子进程
f:查看子进程和父进程的关系
[root@xtt ~]# ps aux|grep sshd
# 4.查看指定进程的pid
[root@xtt ~]# ps -ef|grep [p]ing
-l:显示该进程的启动命令 -a:显示该进程的完整描述信息
top
动态查看进程状态
top - 17:10:40 up 8:51, 1 user, load average: 0.00, 0.01, 0.05
top 命令名
17:10:40系统当前时间
up 8:51 系统已运行时间
1 user 当前登录的用户数量
load average: 0.00(1分钟前), 0.01(5分钟前), 0.05 (15分钟)
第二行:进程状态相关数据
Tasks: 96 total, 1 running, 95 sleeping, 0 stopped, 0 zombie
Tasks:系统当前的进程数量
running:处于R状态,正在运行状态的进程数
sleeping:处于S状态,sleep状态的进程数(等待状态,不是不运行)
stopped:处于T状态,后台挂起暂停状态的进程数
zombie::处于Z状态,僵尸进程的进程数量
第三行:cpu占用情况
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu(s):所有cpu
us:用户进程占用cpu的百分比,又称用户态进程
sy:系统进程占用cpu的百分比,又称内核态进程
id:cpu的空闲程度
ni:优先级较高的进程占用cpu的百分比
wa:等待状态的进程占用cpu的百分比
hi:硬中断占用cpu的百分比
si:软中断占用cpu的百分比
st:虚拟化技术占用cpu的百分比(如docker)
第四行:物理内存
KiB Mem : 995896 total, 719832 free, 129836 used, 146228 buff/cache
995896 total:总内存数
719832 free:剩余内存
129836 used:已使用内存
146228 buff/cache:缓冲区/缓存区内存
可使用内存=buff/cache+free
第五行:虚拟内存
KiB Swap: 1048572 total, 1048572 free, 0 used. 699980 avail Mem
1048572 total:总内存数
1048572 free:剩余内存
0 used:已使用内存
699980 avail Mem :可使用内存
第六行:各进程详细信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID :进程id号
USER :该进程的用户
PR NI :进程优先级
VIRT:虚拟内存占用空间
RES:物理内存占用空间
SHR :共享内存占用空间
S :进程的状态
%CPU :该进程占用cpu的百分比
%MEM :该进程占用内存的百分比
TIME+ :运行时间
COMMAND:进程的运行命令
top 命令用法
top
-d:指定更新的时间(默认是3s更新一次)
-p:只查看指定pid的进程
-u:指定相关用户
-b:将top内容保存到文件中
-n:指定次数
top 常见指令
h 查看帮出
z 高亮显示
1 显示所有CPU的负载
s 设置刷新时间
b 高亮显示处于R状态的进程
M 按内存使用百分比排序输出
P 按CPU使用百分比排序输出
R 对排序进行反转
f 自定义显示字段
k kill掉指定PID进程
W 保存top环境设置 ~/.toprc
q 退出
中断
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求。
kill 向进程发送信号
[root@xtt ~]# 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
//常见信号列表:
数字信号 信号别名 作用
1 HUP 挂起信号,往往可以让进程重新配置(重新加载配置文件) =systemctl reload nginx
2 INT 中断信号,起到结束进程的作用,和ctrl + c 的作用一样
3 QUIT 让进程正常保存退出,结果是进程退出 =systemctl stop nginx
9 KILL 直接结束进程,不能被进程捕获
15 TERM 进程终止,这是默认信号
18 CONT 被暂停的进程将继续恢复运行(放在后台运行,bg)
19 STOP 暂停进程 类似于ctrl + z
20 TSTP 用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停
killall 服务名:杀掉所有进程,不用指定pid
pkill 服务名:杀掉所有进程,不用指定pid
进程的优先级
什么是优先级?
优先级高的进程,可以优先享用系统的资源
优先级的定义和设置
在启动进程时,为不同的进程使用不同的调度策略。
nice值越高:表示优先级越低,例如19,该进程容易将CPU使用量让给其他进程。
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU
查看优先级
使用top命令查看
使用ps命令查看 ssh服务的优先级
ps axo pid,user,nice,command|grep ssh
使用nice命令指定进程优先级
#nice -n -5 vim 1.txt
打开另一个终端,查看进程的优先级
ps aux|grep [x]tt
ps axo user,command,ni|grep [x]tt
使用renice调整已运行程序的优先级
1# 查看sshd服务的优先级
[root@web01 <sub>]# ps axo pid,user,nice,command|grep ssh
2# 重新设置sshd服务的优先级为-20
[root@web01 </sub>]# renice -n -20 6676 (调整已运行程序的PID)
3以上是关于进程管理的主要内容,如果未能解决你的问题,请参考以下文章