第九章、进程和计划任务管理
一、查看进程
1、程序和进程的关系
1.1程序
1.1.1 保存在硬盘、光盘等介质中的可执行代码和数据
1.2.2 文件中静态保存的代码
1.2进程
1.2.1 在CPU及内存中运行的代码
1.2.2 动态执行的代码
1.2.3 父、子进程
1.2.4 每个程序可以创建一个或多个子进程
2、查看进程信息
2.1 ps -aux命令——查看进程静态信息
a:显示终端bai上的所有进程,包括其他用户的进程
u:表示列出进程的用户
x:显示所有终端的进程
[root@xiaolei ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 193696 6820 ? Ss 04:58 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 04:58 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 04:58 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 04:58 0:00 [ksoftirqd/0]
字段一:USER——进程的用户
字段二:PID——进程的ID
字段三:%CPU——进程占用的CPU百分比
字段四:%MEM——占用内存的百分比
字段五:VSZ——该进程使用的虚拟内存量(kb)
字段六:RSS——该进程占用的物理内存量(kb)
字段七:TTY——启动进程的终端名,不是从终端启动的进程则显示为?
字段八:STAT——该行程的状态
D:不可中断的休眠状态;
R:正在运行状态;
S:处于休眠状态,可被唤醒;
T:停止状态,可能在后台暂停或进程处于跟踪调试状态;
Z:僵尸进程,进程已经终止,但是部分程序还在内存当中。
字段九:START——该进程被触发启动时间
字段十:TIME——该进程实际使用CPU运行的时间
字段十一:COMMAND(cmd命令)——进程的启动命令
2.2 进程注意
进程和进程之间的资源不共享,PID不共享
2.3 补充僵尸进程
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为个僵尸进程。
2.2 ps -elf命令——查看进程静态信息
e:显示系统内的所有进程信息
l:使用长格式显示进程信息
f:使用完整的格式显示进程信息
[root@xiaolei ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 48424 ep_pol 04:58 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 04:58 ? 00:00:00 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 04:58 ? 00:00:00 [kworker/0:0H]
字段一:F——内核分配给进程的系统标记
字段二:S——进程的状态
字段三:UID——启动这些进程的用户
字段四:PID——进程的进程ID
字段五:PPID——父进程的进程号(如果该进程是由另一个进程启动的)
字段六:C——进程生命周期中的CPU利用率
字段七:PRI——进程的优先级(越大的数字代表越低的优先级)
字段八:NI——谦让度值用来参与决定优先级
字段九:ADDR——进程的内存地址
字段十:SZ——假如进程被换出,所需交换空间的大致大小
字段十一:WCHAN——若该进程在睡眠,则显示睡眠中的系统函数名
字段十二:STIME——进程启动时的系统时间
字段十三:TTY——进程启动时的终端设备字段十四:TIME——运行进程需要的累计CPU时间
字段十五:CMD——进程的启动命令
2.3 top命令——查看进程动态信息
[root@xiaolei ~]# top
top - 11:44:35 up 6:45, 2 users, load average: 0.02, 0.02, 0.05
Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombie
%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
KiB Mem : 7990060 total, 7300344 free, 390152 used, 299564 buff/cache
KiB Swap: 8257532 total, 8257532 free, 0 used. 7351776 avail Mem
2.3.1 第一行是任务队列信息
11:44:35——系统时间
up 6:45——系统已运行时长
2 users——当前登录用户数
load average: 0.02, 0.02, 0.05——系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
2.3.2 第二行是行为进程信息
Tasks——总进程数
running——正在运行的进程数
sleeoing——休眠的进程数
stopped——终止的进程数
zombie——僵死的进程数
2.3.3 第三行是CPU的信息
us——用户占用
sy——内核占用
ni——优先级调度占用
id——空闲CPU,要了解空闲的CPU百分比,主要看%id部分
wa——I/O等待占用
hi——硬件中断占用
si——软件中断占用
st——虚拟化占用
2.3.4 第四行(KiB Mem)是内存的信息
total——总内存空间
free——空闲内存
used——已用内存
buff/cache——物理内存和交换内存的缓冲区总和
2.3.5 第五行(KiB Swap)是交换空间的信息
total——总交换空间
free——空闲交换空间
used——已用交换空间
avail Mem——可用物理空间
2.4 free -m命令查询的也是第四第五行内容
[root@xiaolei ~]# free -m
total used free shared buff/cache available
Mem: 7802 396 7034 11 371 7124
Swap: 8063 0 8063
2.5top查看进程常用快捷指令
资源相关——内存、磁盘、I/O、CPU、网络、服务相关的资源信息
- 按CPU使用率排序:在"top"命令界面,按下
P
键(大写),系统进程将按照CPU使用率进行排序。 - 按内存使用量排序:在"top"命令界面,按下
M
键(大写),系统进程将按照内存使用量进行排序。 - 按进程ID排序:在"top"命令界面,按下
N
键(大写),系统进程将按照进程ID进行排序。 - 按用户排序:在"top"命令界面,按下
U
键(大写),系统进程将按照所属用户进行排序。 - 切换显示完整命令行:在"top"命令界面,按下
c
键(小写),可以切换显示完整的命令行。 - 切换显示线程信息:在"top"命令界面,按下
H
键(大写),可以切换显示线程信息。 - 退出top:在"top"命令界面,按下
q
键(小写),可以退出"top"命令。
2.4 pgrep命令——查看特定进程信息
2.4.1 根据特定条件查询进程PID信息
可以根据进程的名字或其他属性来查找对应的PID,通常与其他命令一起使用,如kill命令
2.4.2 常用选项:
pgrep -l:显示进程名,缺省时只输出PID号
pgrep -U:指定特定用户
pgrep -t:指定终端
pgrep -a:显示进程名和PID
pgrep -c:仅显示匹配进程的数量,而不显示进程名和PID
pgrep -f:匹配进程名及其参数
2.5 jobs命令
2.5.1 jobs命令可以用于列出这些后台进程的状态信息
2.5.2 常用选项
jobs -l:显示所有后台进程的PID
jobs -p:显示所有后台进程的进程组ID
jobs -n:仅显示最近的后台进程
jobs -r:仅显示正在运行的后台进程
jobs -s:仅显示已停止的后台进程
2.6 pstree命令查看进程树
以树形结构列出进程信息
2.7 补充——tree+目录
树形结构呈现目录结构的工具
[root@xiaolei ~]# ls /market1
mesg mesg1.tar.gz mesg2.tar.bz2
[root@xiaolei ~]# tree /market1
/market1
├── mesg
├── mesg1.tar.gz
└── mesg2.tar.bz2
0 directories, 3 files
二、控制进程
1、进程的启动方式
1.1手工启动
1.1.1 前台启动:用户输入命令,直接执行程序
1.1.2 在命令行尾加入“&”符号——输出信息中包含后台任务序号、PID号
1.2调度启动
1.2.1 使用at命令,设置一次性计划任务
1.2.2 使用crontab命令,设置周期性计划任务
2、进程的前后台调度
2.1 Ctrl+Z组合键——将当前进程挂起,即调入后台并停止执行
2.2 fg命令——将后台进程恢复到前台运行,可指定任务序号
3、终止进程
3.1 Ctrl+C组合键——中断正在执行的命令
3.2 kill命令——kill用于终止指定PID号的进程
3.3 killall命令 ——killall用于终止指定名称相关的所有进程
3.4 kill -9命令 ——选项用于强制终止
3.5 pkill命令——根据特定条件终止相应的进程
常用选项:-U——根据进程所属的用户名终止相应进程
-t——根据进程所在的终端终止相应进程
3.6 kill命令补充说明
我们经常会用到kill命令去杀死一个进程,但是有时会出现kill不成功的现象,这是就要用到kill -9。
之所以这两个命令会有区别是因为所发送的信号(Signal)是不同的。
默认情况下kill命令的参数为-15。
kill -15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自行停止运行并退出;
而kill -9代表的信号是SIGKILL,表示进程被终止,需要立即退出;
因此ki -9表示强制杀死该进程,这个信号不能被捕获也不能被忽略
三、at一次性任务设置
了解即可
四、crontab周期性任务设置
1、crontab计划任务管理
1.1crontab命令
1.1.1 按照预先设置的时间周期(分钟、小时、天、月、周)重复执行用户指定的命令操作
1.1.2 属于周期性计划任务
1.1.3 主要设置文件
①全局配置文件,位于文件:/etc/crontab
②系统默认的设置,位于目录:/etc/cron.*/
③用户定义的设置,位于文件:/var/apool/cron/用户名
1.2管理crontab计划任务
1.2.1 编辑计划任务——crontab -e [-u 用户名]
1.2.2 查看计划任务——crontab -l [-u 用户名]
1.2.3 删除计划任务——crontab -r [-u 用户名]
2、crontab任务配置的格式
2.1 分 时 日 月 周 +命令或脚本文件
字段 | 说明 |
---|---|
分 | 取值为0~59之间的任意整数 |
时 | 取值为0~23之间的任意整数 |
日 | 取值为1~31之间的任意整数 |
月 | 取值为1~12之间的任意整数 |
周 | 取值为0~7之间的任意整数,0或7代表星期日 |
命令 | 要执行的命令或文件脚本 |
2.2时间数值的特殊表示方法
2.2.1 *——表示该范围内的任意时间
2.2.2 ,——表示间隔的多个不连续时间点
2.2.3 -——表示一个连续的时间范围
2.2.4 /——指定间隔的时间频率
2.3示例:
0 17 * * 1-5——周一到周五每天17:00
30 8 * * 1,3,5——每周一、三、五的8:30
0 8-18/2 * * *——8点到18点之间每隔2小时
0 * */3 * *——每三天
5 * * * * ls——每5分钟执行一次ls命令
30 6 * * 0 ls——指定每星期日的6:30执行ls命令
30 3 10,20 * * ls——每月10号和20号的3:30执行ls命令(“,”用来连接多个不连续的时段)
25 8-11 * * * ls——每天8~11点的第25分钟执行ls命令(“-”用来连接连续的时段)
*/15 * * * * ls——每15分钟执行一次ls命令(“/”用来表示间隔的时间频率)
2.4使用crontab -e命令编辑计划任务时注意事项
使用的命令和文件或执行脚本要使用绝对路径,命令可以用which+命令查询路径,文件或执行脚本可以用find命令查询
2.5补充
crontab -l -u命令——展示当前设定的定时任务
6:30执行ls命令
30 3 10,20 * * ls——每月10号和20号的3:30执行ls命令(“,”用来连接多个不连续的时段)
25 8-11 * * * ls——每天8~11点的第25分钟执行ls命令(“-”用来连接连续的时段)
*/15 * * * * ls——每15分钟执行一次ls命令(“/”用来表示间隔的时间频率)
2.4使用crontab -e命令编辑计划任务时注意事项
使用的命令和文件或执行脚本要使用绝对路径,命令可以用which+命令查询路径,文件或执行脚本可以用find命令查询
例如:
[外链图片转存中…(img-K6RtOqrP-1723618832214)]
2.5补充
crontab -l -u命令——展示当前设定的定时任务
crontab -r-u命令——删除所有定时任务,使用需谨慎