一、简述
当运行一个程序的时候,那么运行的这个程序就叫做进程。程序,是一个静态的概念统称为软件,相当于一个被编译好可执行的二进制文件,同时程序可以长期存在系统中;进程,是一个动态的概念,也就是打开软件,进程会跟随着程序的终止而被销毁,不会永久存在系统中,打开关闭软件就相当于进程的生命周期。
二、进程的生命周期
说明
子进程在处理任务时,父进程会进入等待状态。子进程处理完任务后会执行退出,然后唤醒父进程来回收子进程的资源。如果子进程在执行任务时父进程退出了,但子进程还在,那么这些子进程就会没有父进程管理,那这个进程就会成为僵尸进程。
三、进程信息
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.5 0.0 125372 3816 ? Ss 09:19 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 09:19 0:00 [kthreadd]#ps 使用方法
ps [参数]#常用参数组合-ef-aux
USER | 启动进程的用户 |
PID | 进程运行的PID |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用内存的百分比 |
VSZ | 进程占用虚拟内存的大小(KB为单位) |
RSS | 进程占用物理内存实际大小(KB为单位) |
TTY | 进程由哪个终端启动的(?代表内核程序) |
STAT | 进程运行过程中的状态 |
START | 进程的启动时间 |
TIME | 进程占用CPU的总时间(以秒为单位) |
COMMAND | 程序的运行指令。 [程序名称]属于内核态的进程,没有[方括号]的是用户态进程。 |
四、进程状态
进程基本状态
R | 进程正在运行中 |
S | 进程可中断睡眠 |
T | 进程被暂停 |
D | 不可中断睡眠 |
Z | 僵尸进程 |
进程状态符号
s | 进程是控制进程,Ss进程的领导者,也就是父进程 |
< | 进程运行在高优先级上,S< 优先级较高的进程 |
N | 进程运行在低优先级上,SN 优先级较低的进程 |
+ | 进程运行在前台终端上,R+ 表示进程在前台运行 |
l | 进程是多线程的,Sl 表示进程是以线程方式运行 |
五、动态查看进程状态
指标说明
10:33:05 | 当前系统时间 |
1:13 | 系统已经运行了1小时13分钟 |
1 user | 当前登录系统的用户有 1 个 |
0.00, 0.01, 0.05 | 系统平均负载 1分钟,5分钟,15分钟 |
Tasks | |
98 total | 当前进程的总数 |
2 running | 正在运行的进程数 |
96 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
%Cpu(s) | |
0.3 us | 用户空间占用CPU时间百分比 |
0.0 sy | 内核空间占用CPU时间百分比,通常内核是与硬件进行交互 |
0.0 ni | 改变过优先级的进程占用CPU时间百分比 |
99.5 id | 空闲CPU百分比 |
0.2 wa | CPU等待IO完成的时间 |
0.0 hi | 硬中断占CPU时间百分比 |
0.0 si | 软中断占CPU时间百分比 |
0.0 st | 虚拟机占用物理CPU的时间 |
KiB Mem | |
3861076 total | 内存总量 |
2925816 free | 空闲内存量 |
155980 used | 已使用的内存量 |
779280 buff/cache | 内核缓存的内存量 |
KiB Swap | |
2097148 total | Swap交换区内存的总量 |
2097148 free | 空闲Swap交换区内存量 |
0 used | 已使用Swap交换区内存量 |
3469180 avail Mem | Swap交换区可用内存量 |
六、管理进程状态
当程序运行为进程后如果希望停止进程时可以使用 kill 命令对进程发送关闭信号。处理 kill 命令还有 killall 和 pkill。
1.kill 信号
~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) 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
想要详细了解 kill 信号的可以参考下这位大佬的 @sugarCYF 的KILL命令信号详解_kill 信号-CSDN博客
2.kill 用法
#kill 使用语法
kill [参数/x信号] [PID]#常用信号1:平滑结束进程,服务启动后PID不变9:强制结束进程15:进程处理完最后一个请求后,结束进程。kill 默认信号#pkil 使用语法
kill [程序名称]批量结束有关程序的所有进程#kiall 使用语法
killall [程序名称]批量结束有关程序的所有进程
七、管理后台进程
通常进程都会在终端运行,一旦关闭终端进程也就会随着结束。那么将进程放入后台运行也就会比较方便,不会影响到终端的正常使用。比如拷贝一写比较大的文件或者是下载文件等等一些不可被终端的进程。
1.将进程放入后台的工具
jobs、bg、fg等方式需要先查看状态比较麻烦,所以推荐使用 screen。
2.screen 用法
#语法
screen [参数] [任务名称]#开启一个任务窗口
~]# screen -S wget#开始下载任务
~]# wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso#退出下载窗口
ctrl + a + d 平滑退出screen窗口,但是不会终止screen中的任务#终止 screen 窗口
~]# exit#查看任务
~]# screen -list
There is a screen on:1722.wget (Detached)
1 Socket in /var/run/screen/S-root.#进入正在运行的任务窗口
~]# screen -r wget#还有种方法,在命令后加 & 将命令放在后台运行~]# wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso &>/dev/null &
[1] 1753
~]# ps -ef | grep wget
root 1753 1350 9 14:49 pts/0 00:00:00 wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.isoPS:如果不太明白 &>/dev/null 是什么意思的话,可以看下我之前发布的 Linux 重定向 https://blog.csdn.net/zy_101922546/article/details/135837429?spm=1001.2014.3001.5502
八、进程优先级
1.优先级指的就是优先选择,优先享受资源。
2.进程的 nice 值越高表示优先级越低,例如,19,那该进程容易将资源使用量让给其他进程。
3.进程的 nice 值越低表示优先级越高,例如,-20,该进程更不容易将资源使用量让给其他进程。
PR:代表进程的优先级
NI:代表进程的 Nice 值
4. nice 用法
#参数-n:指定nice值-p:指定 PID#指定 nice 值
~]# nice -n 5 vim 1.txt
~]# ps -axo pid,command,nice|grep vim |grep -v grep1832 vim 1.txt#renice 用法
调整已经启动过的进程优先级
~]# renice -n -20 -p 7261
九、平均负载
如果平均负载(1分钟,5分钟,15分钟)的三个基数基本相同或者相差不大,那么说明系统负载很平稳。但如果1分钟的值远小于15分钟的值,那么就说明系统最近1分钟的负载在减少,而过去的15分钟内却有很大的负载。相反,如果1分钟的值远大于15分钟的值,那就说明最近1分钟的负载在增加,这种增加有可能是临时性的,也有可能还会持续增加,需要持续观察。
例如:
假设有两个CPU,系统上看到的平均负载为 2.73 6.90 12.98
说明在过去的1分钟内,系统有136%的超载(2.73/2=136%)
在过去的5分钟内,系统有345%的超载(6.90/2=345%)
在获取的15分钟内,系统有649%的超载(12.98/2=649%)
总体来说系统的负载是在逐渐的降低
平均负载与CPU使用率之间的关系
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,所以他不仅包括了正在使用CPU的进程,还包括了等待CPU的进程和等待I/O的进程。