如何进行进程的管理和计划任务的设定

645 阅读12分钟

一、查看进程的方式

1. ps命令(用于静态查看进程信息)

1.1 ps aux 命令

显示所有终端上面的所有用户的所有进程

选项含义
a显示终端上的所有进程,包括其他用户的进程
u表示列出进程的用户
x显示所有终端的进程

①.进程各项信息及含义

image.png

信息含义
USER进程的用户
PID进程的ID
%CPU进程占用的CPU百分比
%MEM占用内存的百分比
VSZ该进程使用的虚拟内存量(KB)
RSS该进程占用的物理内存量(KB)
TTY启动进程的终端名
STAT该进程的状态
TIME该进程实际使用CPU运行的时间
COMMAND进程的启动命令

②.扩展:进程状态的分类

代表字符状态
D不可中断的休眠状态
R正在运行状态
S处于休眠状态,可被唤醒
T停止状态,可能是在后台暂停或进程处于跟踪调试状态
Z僵尸进程,进程已经终止,但是部分程序还在内存当中

1.2 ps -elf 命令

①. ps -elf 命令的选项及含义

ps -elf命令和ps aux命令一样是查询所有进程的信息的,ps命令可以跟不同的选项有不同的显示进程效果,有 以下几种选项:

选项含义
-e显示系统内的所有进程信息
-l使用长格式显示进程信息
-f使用完整的格式显示进程信息
-a显示所有进程pid
-T查看所有进程信息
-aT显示所有的线程

②. ps -elf命令显示各列信息及含义

如下图所示,使用命令后我们会得到以下信息:

image.png

信息含义
F内核分配给进程的系统标记
S进程的状态
UID启动这些进程的用户
PID进程的进程号
PPID父进程的进程号
C进程生命周期中的CPU利用率
PRI进程的优先级(数字越大代表越低的优先级)
NI谦让度值来参与决定优先级
ADDR进程的内存地址
SZ假如进程被换出 即内存不足够进程运行,进程将会进入交换空间运行,所需交换空间的大致大小
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名
STIME进程启动时的系统时间
TTY进程启动时的终端设备
CMD进程的启动命令

2、top命令(动态实时查看进程)

2.1 top命令基本介绍

top是我们Linux系统中默认的查看系统进程的工具,额外衍生的更好用的工具有iotop(查看读写) ,atop,iftop等工具。

top命令可以动态查看相关的进程信息,并且可以根据相关进程的使用情况进行一个排名。

命令:直接输入top进入界面:

image.png

第一层字段:如下图所示,进程的一些基本信息 image.png

第二层字段:如下图所示,我们可以查看进程的总览 image.png

第三层字段:如下图所示,我们可以看到cpu的整体占用情况 image.png 第四层字段:如下图所示,我们可以看到物理内存以及swap分区内存的一些基本使用情况

image.png

补充:系统负载值跟本身这个数值跟cpu的数量挂钩,我们如何查看自己的cpu?

查看cpu信息:

  1. lscpu image.png

  2. cat /proe/cpuinfo/(查看cpu的详细信息)

image.png

  1. top后按1

image.png

平均负载值就是系统平均活跃的进程数。

如何判断cpu饱和:查看load average值是否大于等于我当前系统cpu数量的80%时,当前系统处于饱和状态;如果在我们工作的闲暇时间,我们的cpu一直处于饱和状态,要检查是否被攻击,变成肉机或者矿机,导致我们的负载值不正常一直处于高度饱和状态。

除了top命令,还有其他的命令可以查看系统负载值

w也可以查看load average

uptime可以查看load average

2.2 进程信息区各词解释

image.png

信息含义
PID进程ID
USER进程所有者的用户名
PR优先级
NI谦让度值,负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存大小,单位KB
RES进程使用的物理内存大小,单位KB
SHR共享内存大小,单位KB
S进程状态
%CPU上次更新时间到现在进程使用CPU的百分比情况
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间的总计
COMMAND命令名/命令行

3、pgrep命令(根据特定条件查询进程)

3.1 pgrep的选项及含义

pgrep命令一般可用根据特定条件去查询进程的PID信息

使用选项及含义如下:

选项含义
-l显示进程名
-U指定特定用户
-t指定终端

PS:如果我们不使用选项直接使用pgrep命令我们的所有进程信息只会显示PID,没有其他内容,如下图所示:

image.png

3.2 pgrep -l(额外显示进程名称)

image.png

3.2 pgrep -U(显示特定用户执行的程序)

我们可以将-l和-U结合起来使用,可以单独看到特定用户执行的程序内容:

image.png

3.3 pgrep -t(可以指定终端进行查看相关进程信息)

我们要查看终端的信息w命令是最简单的方法: image.png 正常登录虚拟机上的终端后,可以看到完整信息:

image.png 然后我们可以通过“-t”的选项进行指定终端查询进程:

image.png

4、pstree(以树状的结构显示进程)

4.1 pstree的选项及含义

选项含义
-a显示完整信息
-u列出对应用户名
-p列出对应PID号

pstree 也可以直接使用,效果如下图:

image.png

4.2 pstree -a命令

image.png

4.3 pstree -U

image.png

二、如何启动进程

2.1 手工启用

在手工启用种我们又分两种启动方式:

  • 前台启动:用户直接输入命令,直接执行程序
  • 后台启动:在命令行尾加入“&”符号,可以让需要占用前台的命令,进入后台执行,节省前台的资源

后台启用的案例:

比如我们要创建一个大型文件如下图所示:

image.png 我们可以从图中看到我们创建文件的过程一直会在前台,这个时候我们是无法在操作界面进行任何的其他命令操作只能等待文件创建结束才能使用其他命令:

image.png 如果我们使用后台启用可以看下我们的命令界面:

image.png 从上图可以看到,如果我们需要执行占用前台大量时间的命令,我们可以使用后台启用的方式进行命令操作,这样可以节省我们前台的资源,可以让我们进行其他的命令操作。

2.2 如何进行进程的前后台调度启用

1. 挂起进程

  • Ctrl+Z组合键

image.png 如上图所示,我们正在运行编辑文件的命令,然后我们使用ctrl+z组合键进行挂起:

image.png

2. jobs 命令(查看后台被终止进程)

jobs命令通常用于查看处于后台的任务列表

  • jobs -[l]命令(显示后台任务列表进程的名称,若不加该选项,后台任务仅会显示进程的PID号)

image.png

3. fg命令

  • fg命令用于将后台的进程恢复到前台运行,可指定任务的序号

image.png

2.3 如何终止进程?

1.Ctrl+C组合键

该组合键应用于中断正在执行的命令

image.png

2.kill、killall命令

  • kill用于终止指定PID号的进程
  • killall用于终止指定名称相关的所有进程(停止进程更干净,有可能会误杀进程)
  • -9选项用于强制终止

补充:kill与kill-9的区别: kill在我们实际运用中其实默认为kill [-15]的选项内容,即系统发送一个信号(名为Sigterm)告诉进程需要关闭,让进程自行停止运行并退出,进程本身可以自行清理缓存退出,也可以直接拒绝继续运行。 而kill -9 代表的信号为Sigkill,是系统告诉进程要被终止,立即退出,此信号不能被捕获,也不能被进程忽略,从而强制杀死进程。

总结:kill -9尽量不要在工作中使用,属于高危操作,有些进程需要进行保存备份的操作,然后再退出,kill-9容易造成进程未保存备份数据,造成数据丢失的风险。

pkill命令(根据指定用户终止相关进程)

  • pkill既可以跟相关进程名称进行终止操作也可以指定用户去终止相关用户进程

image.png

image.png

image.png 如上图所示另外2个窗口正在使用的进程均被杀掉

  • pkill -9 -U+用户名:直接终止用户操作 我们先使用一个用户模拟正在使用一个进程,查看进程是否被捕获:

image.png 然后我们使用pkill -9 -U的命令直接终止用户的操作

image.png

image.png 上图可以看到用户在编辑文件过程中直接被杀死,无法进行其他操作

  • pkill -t + 终端:指定终端

PS:pkill指定进程名的命令操作,由于只靠进程名进行终止任务,有可能会造成误杀,造成其他进程的终止。

三、计划任务管理

3.1 一次性计划任务(一次性调度任务)

格式:at [时间] [年月日](不加年月日代表当天执行)

输入完命令行后,ctrl+d提交任务

image.png 我们使用atq可以查看未执行任务的列表:

image.png 删除未执行任务我们可以使用

atrm [序号] 的命令删除:

image.png 上图我们使用atq查看,已没有未执行的任务

3.2 如何进行周期性计划任务?

像我们工作中,如果需要建立重复性的并且带有循环机制的任务,一条一条一次性调度任务,工作量很大,所以我们可以因此建立周期性的计划任务,让系统按照循环规则进行任务的执行

第一步:开启crond服务

我们建立周期性计划任务的设定时一定要开启crond服务(周期性任务的守护任务)

命令:systemctl enable crond(开启crond服务)

第二步:使用crontab命令

1. crontab命令简介

crontab命令属于周期性计划任务,是按照预先设置的时间周期(分钟,小时,天/日/号,月,周)重复执行用户指定的命令。

该命令的主要的配置文件有以下几种:

  1. 全局配置文件,位于文件:/etc/crontab
  2. 系统默认的设置,位于目录:/etc/cron.*/
  3. 用户定义的设置,位于文件:/var/spool/cron/用户名

2. crontab任务配置的格式

crontab任务配置的格式为:分 时 日 月 星期 +命令/脚本

时间取值范围
0-60
0-23
1-31
1-12
0-7(0,7均代表星期天)

3.时间数值的特殊表示方法

    • 代表时间范围内的任意时间
  • ,代表不间隔不连续的时间点
  • “-”代表一个连续的时间范围
  • / 代表间隔时间的频率(可以理解为每[段时间])

举例:

  1. 30 22 23 4 * 代表四月23日的22点30分执行任务
  2. 30 22 23 * * 代表每月23日的22点30分执行任务
  3. 30 22 * * * 代表每天的22点30分执行任务
  4. 30 21-22 23 */4 * 代表每年的4,8,12月份的23号的20点30分,21点30分,22点30分执行任务
  5. 30 22 */10 * * 代表每月的1号,11号,21号,31号的22点30分执行任务
  6. 30 22 * * 1,3,5 代表每周一、三、五的22点30分执行任务

PS:如果日月周三个时间位置均设置了具体时间,代表满足条件之一的时间点,都会去执行任务

第三步:编写计划性任务内容

crontab -e (编写执行内容)

举例,我们设定每周一、三、五设定系统晚上22点重启:

image.png

如上图所示我们使用crontab -e命令可以直接进入一个编辑界面对我们的周期性任务进行内容编辑

crontab -l(查询执行内容)

我们设定好周期性内容后,可以进行检查,查看设置是否正确:

image.png

补充内容

1.如何删除计划任务?

命令格式:crontab -r (删除周期性任务)

image.png PS:所有的crontab任务,不论是查询,编辑还是删除选项,都可以加上-u选项+用户名,可以用来查看需要其他用户执行的周期性任务内容,方便进行管理。

2. 编辑周期性文件的其他方式

  1. 通过修改用户定义的设置文件

前面有说过用户定义的设置,系统默认放在/var/spool/cron的目录下方的一个与当前用户同名的文件中:

image.png

image.png 如上图所示,我们可以使用vim编辑我们产生的用户文件,进去后发现,一样处于编辑周期性任务的界面,之前所设置的周期任务也同样存在。

  1. 修改全局配置文件

同样我们可以同上一条操作一样,修改我们周期任务的全局配置文件,一样可以达到增删改查周期任务的效果:

image.png 如上图,我们可以看到我们全局配置文件中的格式和另外一种设置格式有部分区别,如果我们要使用全局配置文件的方法配置周期文件,我们要在执行的周期设置与执行的命令中间,加上需要执行这条命令的用户。