文章目录
程序和进程的关系
- 程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 静态保存的代码
- 进程
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个程序可以创建一个或多个进程
进程是程序运行的过程,称之为动态,有生命周期及运行状态
查看进程信息 -ps
- ps命令
- 查看静态的进程统计信息 aux
[root@localhost ~]#ps aux
USER:启动此进程的用户账号的名称
PID:该进程再系统中数字ID号(唯一)
%CPU:CPU占用的百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟内存(KB)
RSS:进程占用的实际内存(物理内存(都是以KB作为单位的))
TTY:该进程在哪个终端上运行(不是从终端启动的进程则视为“?”)(pts表示远程终端)
STAT:该进程的状态(R:正在运行状态;S:处于休眠状态,可被唤醒; T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程, 进程已经终止,但是部分程序还在内存当中)
D:系统守护进程
T:调式、程序执行一般停止
R:该程序目前正在运作,或者是可被运作
S:该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号(siqnal)唤醒。
T:该程序目前正在侦测或者是停止了
Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序的状态D不可中断状态
(它们含意如下:
<:表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
l:表示进程是多线程的
+:表示当前进程运行在前台
D:系统守护进程
T:调式、程序执行一般停止)
START:启动该进程的时间。
TIME:该进程占用的CPU时间
COMMAND:启动该进程的命令的名称
- 查看静态的进程统计信息
[root@localhost ~]#ps -elf
-e:显示系统内的所有进程信息。
-i:使用长格式显示进程信息。
-f:使用完整的格式显示进程信息。
各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;ttyltty7代表本地控制台终端。
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
僵尸进程
:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于I/O情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从2.6内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在BSD格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写L)。
-+:位于后台。
-C:进程占用CPO的百分比。
查看进程信息top
- top命令
- 查看动态的进程排名信息
[root@localhost ~]# top
- 查看动态的进程排名信息
上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
uptime
20:28:48 //当前时间
up 5:07 //系统运行时间,说明此服务器连续运行了5分07秒了
user当前登录用户数
load average:0.00,0.01,0.05系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。
系统任务(Tasks)信息:total,总进程数:running,正在运行的进程数:sleeping,休眠的进程数:stopped,中止的进程数:zombie,僵死无响应的进程数。
CPU占用信息:us,用户占用:sy,内核占用:ni,优先级调度占用:id,空闲CPU:wa,I/O,等待占用:hi,硬件中断占用:si,软件中断占用:st,虚拟化占用。要了解空闲的CPU百分比,主要看id部分。
内存占用(Mem)信息:total,总内存空间:free,空闲内存:used,已用内存:buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total,总交换空间:free,空闲交换空间:used,已用交换空间:avail ,Mem,可用物理空间。
详细说明
Tasks:215 total 进程总数
1 running 正在运行的进程数
214 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
%Cpu(s):0.0 us 系统用户进程使用CPU百分比。
0.0 sy 内核中的进程占用CPU百分比 优先级调度占用
0.0 ni 用户进程空间内改变过程优先级的进程占用CPU百分比
100.0 id 空闲CPU百分比
0.0 wa cpu等待I/O完成的时间总量
实验:
终端1:执行:top
终端2:dd if=/dev/zero of=/a.txt count=10 bs=100M
终端3:dd if=/dev/zero of=/a.txt count=10 bs=100M
0.0 hi (了解一下)硬中断消耗时间 硬件中断占用
硬中断,占的CPU百分比。
硬中断是由硬件产生的,比如像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(ps:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。
#hi -> Hardware IRQ:The amount of time the CPU has been servicing hardware interrupts.
0.0 si (了解一下)软中断消耗时间 软件中断占用
软中断,占的CPU百分比。
通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。
#si -> Software Interrupts.: The amount of time the CPU has been servicingsoftware interrupts.
0.0 st (steal 偷)虚拟化占用。要了解空闲的CPU百分比,主要看id部分。
st:虚拟机偷取物理的时间。比如:物理机已经运行了KVM,XEN虚拟机。KVM虚拟机占用物理机的cpu时间
Mem:3861508 total 物理内存总量
623644 free 空闲内存总量
826800 used 使用的物理内存总量
2411064 buff/cache 用作内核缓存的内存量。(和free -k 一个意思)
Swap: 4095996 total 交换区总量
4095996 free 空闲交换区总量
0 used 使用的交换区总量
2605720 avail Mem 总的可利用内存是多少
top命令全屏操作界面快捷键
:
默认 3s 刷新一次,按 s 修改刷新时间按空格:立即刷新。
P:按CPU排序
M:按内存排序
T:按时间排序
P:进程IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1 :显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q 键可以正常地退出 top 程序
ps:若通过top排名工具发现某个进程CPU占用率非常高,需要终止该进程的运行,可以在top操作界面中按 k 键,然后在列表上方将会出现"PID to signal/kill [default pid=3180]:"的提示信息,根据提示输入指定进程的 PID号并按Enter键,出现“Send pid 5597 signal [15/sigterm]“的二次确认的提示信息,然后按Enter键确认即可终止对应的进程。
行进程信息
PID进程id
USER 进程所有者的用户名
PR 优先级(由内核动态调整),用户不能
NI 进程优先级。nice值。负值表示高优先级,正值表示低优先级,用户可以自己调整。
VIRT (virtual memory usage) 虚拟内存,是进程正在使用的所有内存(ps中标为VSZ)VIRT:virtual
memory usage 虚拟内存
1、进程“需要的“虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程中请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES (resident memory usage) 是进程所使用的物理内存。实际实用内存(ps中标为RSS)
RES: resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库古用内存的情况,它只统计加载的库文件所古内存大小
SHR共享内存大小,单位 kb SHR:shared memory共享内存
1、除M了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES-SHR 4、swap out后,它将会降下来
s 进程状态
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵停
%CPU 上次更新到现在的CPU时间占用百分比
MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
查看进程信息 pgrep
- pgrep命令
- 根据特定条件查询进程 PID 信息
-l:显示进程名
-U:指定特定用户
-t:指定终端
- 根据特定条件查询进程 PID 信息
查看进程信息pstree
- pstree命令
-
以树形结构列出进程信息
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
-
进程的启动方式
- 手动启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号
输出信息中包括后台任务序号、PID号。
- 调度启动
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
进程的前后台调度
- Ctrl+Z组合键
- 将当前进程挂起,即调入后台并停止执行
- jobs命令
- 查看处于后台的任务列表
- fg命令
- 将后台进程恢复到前台运行,可指定任务序号
- 将后台进程恢复到前台运行,可指定任务序号
终止进程的运行
-
Ctrl+C组合键
- 中断正在执行的命令
-
kill、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称的所有进程
- -9选项用于强制终止
-
pkill命令
- 根据特定条件终止相应的进程
- 常用命令选项
- -U:根据进程所属的用户名终止相应进程
- -t:根据进程所在的终端终止相应进程
当用户在前台执行某个进程时,可以按Ctrl+c组合键强制进行中断(如命令长时间没有响应的情况下)。
中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按Ctrl十C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程终止工具kill、killall和pkill。
计划任务管理 at
- at命令
- 一次性计划任务
at> < EOT > (按Ctrl+D键提交任务)
- 一次性计划任务
查看未执行的任务列表
删除第六条任务,再查询就不会查看到那个命令
计划任务做什么:
1、定期备份web 数据库
2、定期采集检测数据
3、find 5天以外的数据删除
微服务java(日志)
计划任务管理 crontab
- crontab命令
- 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
crontab 守护进程会自动检查 /etc/crontab 文件、/etc/cron.d目录及/var/spool/cron/目录中的改变,如果发现配置有更改,它们会被载入内存,所有放某个crontab文件改变后并且不需要重新启动crond守护进程就可以设置生效。
- 管理crontab计划任务
-
编辑计划任务
crontab -e [-u 用户名]
-e编辑计划任务,-u指定用户去管理计划任务
默认是针对当前用户(一般只有root用户可以指定计划任务) -
查看计划任务
crontab -l [-u 用户名] -
删除计划任务
crontab -r [-u 用户名]
-
crontab任务配置的格式
字段 | 说明 |
---|---|
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,0或7代表星期日 |
命令 | 要执行的命令或程序脚本 |
- 时间数值的特殊表示方法
- “*”表示该范围内的任意时间
- “,”表示间隔的多个不连续时间点
- “-”表示一个连续的时间范围
- “/”指定间隔的时间频率
- 应用实例
- 30 18 * * 1-6 周一到周六每天18:30
- 45 6 * * 2,4,6 每周二、四、六的6:45
- 0 6-18/2 * * * 6点到18点之间每2小时
- 0 * */2 * * 每2天
总结
- 查看进程的命令(ps、top、pgrep、pstree)
- 进程控制
- 启动进程、调度进程、终止进程
- at命令设置计划任务
- crontab计划任务的配置字段