进程和计划性任务管理
前言
程序是保存在外部存储介质(如硬盘、光盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序。在Linux系统中,每个程序启动后可以创建一个或多个进程,一个进程包含一个或多个线程,线程是执行操作的最小单元。那如何查看进程,下面将进行介绍
查看进程
ps 命令 —— 查看静态的程序统计信息
- ps 命令是Linux系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照
语法:
ps [选项] 注意:有一些选项时不带“-”前缀的(添加“-”前缀后含义可能会有出入)
a : 显示当前终端下的所有进程信息,包括其他用户的进程、与“x”选项结合时将显示系统中所有的进程信息
u 使用以用户为主的格式输出进程信息
x 显示当前用户在所有终端下的进程信息
-e 显示系统内的所有进程信息
-l 使用长(Long)格式显示进程信息
-f 使用完整的(Full)格式显示进程信息
1、常用命令 ps aux 将以简单列表的形式显示出进程信息:
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.9 0.1 193700 6836 ? Ss 09:40 0:02 /usr/lib/syste
root 2 0.0 0.0 0 0 ? S 09:40 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:40 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 09:40 0:00 [kworker/0:0]
其中各字段的含义:
USER: 启动该进程的用户账号信息
PID: 该进程在系统中的数字ID号,在当前系统中是唯一的
%CPU:CPU占用的百分比
%MEN:内存占用的百分比
VSZ:占用虚拟内存(SWAP)的大小
RSS:占用常驻内存(物理内存)的大小
TTY: 表明该进程在哪个终端上运行。“?”表示未知或者不需要终端
SATA: 显示了进程当前的状态,如S(休眠),R(运行),Z(僵死),<(高优先级),N(低优先级),s(父进程),+(前台进程),l(多线性进程),D(不可休眠进程)对处于僵死状态的进程应该予以手动终止
START: 启动该进程的时间
TIME: 该进程占用CPU时间
COMMAND: 启动该进程的命令的名称
2、以长格式显示系统进程信息:
[root@localhost ~]# 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 - 48425 ep_pol 09:40 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root 2 0 0 80 0 - 0 kthrea 09:40 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 09:40 ? 00:00:00 [ksoftirqd/0]
3、ps命令不带选项,将只显示当前用户会话打开的进程
[root@localhost ~]# ps
PID TTY TIME CMD
13578 pts/0 00:00:00 bash
13889 pts/0 00:00:00 ps
4、查询指定进程的信息,可以结合 “|” 管道和 grep 命令进行过滤,以下示例为过滤 bash 进程
[root@localhost ~]# ps aux | grep bash
root 793 0.0 0.0 115256 924 ? S 09:40 0:00 /bin/bash /usr/sbin/ksmtuned
root 12918 0.0 0.0 51332 588 ? Ss 09:44 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 13578 0.0 0.0 116692 3284 pts/0 Ss 09:44 0:00 bash
root 13946 0.0 0.0 112680 984 pts/0 S+ 09:56 0:00 grep --color=auto bash
top 命令 —— 查看进程动态信息
- top 命令 查看动态的进程排名信息,将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次
[root@localhost ~]# top
top - 10:15:57 up 35 min, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 192 total, 2 running, 190 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.7 us, 1.3 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865308 total, 2220096 free, 811108 used, 834104 buff/cache
KiB Swap: 5242876 total, 5242876 free, 0 used. 2754108 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12960 root 20 0 2103820 258500 51920 S 16.0 6.7 0:23.80 gnome-shell
12543 root 20 0 333028 41500 10204 S 5.0 1.1 0:07.02 X
13565 root 20 0 739992 26984 16676 S 2.0 0.7 0:02.57 gnome-terminal-
9 root 20 0 0 0 0 R 0.3 0.0 0:00.43 rcu_sched
730 root 20 0 6472 652 540 S 0.3 0.0 0:00.42 rngd
(应用场景:安全架构的服务器常时间不操作会掉线,可以使用top命令查看命令更新服务器的信息,这样就不会掉线了)
pgrep 命令 —— 查询进程信息
- pgrep 命令 用来查询特定进程信息的专用工具;可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID号
1、通过pgrep命令可以指定进程的一部分名称进行查询,结合“-l"选项可以同时输出对应的进程名
[root@localhost ~]# pgrep -l "ker"
4 kworker/0:0
5 kworker/0:0H
15 kworker/1:0H
19 kworker/2:0
20 kworker/2:0H
2、结合“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程
tty=0 远程终端登录
tty=1 本地终端登录
[root@localhost ~]# pgrep -l -U lisi tty 1 '//查询在1终端的lisi 用户的进程'
27483 bash
27584 vim
pstree 命令 —— 查看进程树
- pstree 命令可以输出 Linux 系统中各进程的树形结构,更加直观的判断出各进程之间的相互关系(父进程、子进程)
pstree -aup
其中:
-a :列出完整的命令信息
-u :列出对应的用户名
-p :列出对应的PID号
pstree 命令默认情况下只显示各进程的名称
(缺少该命令可以用 :yum -y install psmisc 命令进行安装)
控制进程
启动进程
- 手动启动
- 前台启动 :用户输入命令,直接执行程序
- 进程在前台运行时,用户必须等到该进程执行结束并退出后才能继续输入其他命令。运行耗时较长的操作可进入后台运行,进程在后台运行时,用户可以继续在当前终端输入其他命令,无需等待该进程结束。
- 后台启动 :在命令行尾加入 “&” 符号
例如:当cp命令从光盘中制作镜像时,由于需要复制的数据较多,耗时较长,因此可结合 “&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作
cp /dev/cdrom mycd.iso &
- 调度启动进程
- 进程的调度启动可以通过at、crontab 命令进行设置
- at :一次性计划任务
- crontab :周期性计划任务
改变进程的运行方式
-
按 Ctrl + Z 挂起当前的进程(调入后台并暂停执行)
- 当执行程序正在执行且执行缓慢时,可以利用 Ctrl + Z 组合键将该进程挂起到后台暂停执行。
-
jobs 查看后台进程;结合 “-l” 选项同时显示出该进程对应的PID号
-
将后台的进程恢复运行
- bg 命令,可以将后台中挂起的任务恢复运行,继续在前台执行操作。
- fg 命令,可以将后台任务重新恢复到前台运行
终止进程执行
- kill 命令终止进程
1、通过 kill 命令终止进程,需要使用进程的PID号
kill PID号
2、若发送了终止命令,却没有终止时,可以结合 “-9” 选项强行终止进程
kill -9 PID号
- killall 命令终止进程
killall 终止命令,可以同时终止多个相同名称的进程;“-9”选项依旧是强制终止
killall 进程名
killall -9 进程名
- pkill 命令终止进程
可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
与 pgrep 命令的选项基本类型,“-U”为指定用户、“-t”为指定终端
pkill -9 -U “dagege” ####强行终止dagege用户的进程
计划任务管理
at 命令, 一次性计划任务
- at 命令是设置临时计划性任务
- date:查看当前时间。设置任务,时间不可在当前时间之前.
- 命令输入完成后按 Ctrl + D组合键提交任务即可
语法:
at [HH:MM] [YYYY-MM-DD]
示例:
date ###查看下当下的时间
at [13:10] [2020-11-5] ###设置一次性计划任务
at> pgrep -U root | wc -l > /tmp/ps.root ###在2020年11月5号下午1点,过滤出root用户进程再统计行数导入 /tmp/ps.root 文件中
at><EOF> 任务设置完毕后按 Ctrl + D 组合键提交任务
验证:等过了时间在 cat /tmp/ps.root 文件中查看
atq 命令,查看待执行任务的列表
- 对于已经设置但还未执行(未到时间点)的计划任务,可以通过 atp 命令进行查询。但已执行过的 at 任务将不会再出现在列表中。
atrm 命令,删除指定编号的 at任务
- atrm命令用来删除指定编号的at任务,编号可以通过atq查看。
- 删除后的at任务不会出现在atq显示结果中。
- 但已经执行过的任务无法删除
crontab 周期性计划任务
- 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻重复性系统管理任务的操作。软件包cronie 提供crontab工具,系统服务crond和配置文件 /etc/crontab。开启系统服务crond 是启动周期性任务的前提条件
crontab命令
按照预先设置的时间周期(分钟、小时、天)重复执行用户指定的命令操作
属于周期性计划任务
crontab 任务配置的格式:
* * * * * run_command(也可是绝对路径)
(分 、时 、日 、月、周 执行命令)
其中:
* :表示该范围内的任意时间
, :表示间隔的多个不连续时间点
- :表示一个连续的时间范围
/ :指定间隔的时间频率
示例:
0 17 * * 1-5 ###周一到周五每天17:00
30 8 * * 1,3,5 ###每周一、三、五的8点30分
0 8-18/2 * * * ###8点到18点之间每2个小时
0 * */3 * * ###每3天
*/40 * * * * ###每40分钟
crontab 的配置文件和目录
- 全局配置文件,位于文件:/etc/crontab
- 系统默认文件,位于目录:/etc/cron.*
- 用户自定义文件,位于文件:/var/spod/cron/用户
crontab 命令管理用户的计划任务
编辑计划任务:crontab -e [-u 用户名]
查看计划任务:crontab -l [-u 用户名]
删除计划任务:crontab -r [-u 用户名]
———————————————————————————————————
到此结束,感谢浏览~