Linux进程和计划任务管理

前言

Linux系统中的进程就相当于Windows的任务管理器,只是区别于任务管理器的是进程需要用命令来管理的。

一、程序和进程的关系

1、程序

  • 保存在硬盘、光盘等介质中的可执行代码和数据
  • 静态保存的代码

2、进程

  • 在CPU及内存中运行的程序代码
  • 动态执行的代码
  • 父、子进程
  • 每个程序可以创建一个或多个进程

二、查看进程

1、查看进程信息ps

常用选项:

选项说明
-a显示当前用户所在终端下的进程信息
-u使用以用户为主的格式输出进程信息
-x显示当前用户在所有终端下的进程信息
-e显示系统内的所有进程信息
-l使用长格式显示进程信息
-f使用完整的格式显示进程信息

1.1.ps aus 命令

执行“ps aus” 命令后,将以简单列表的形式显示出进程信息,如下:
在这里插入图片描述

上述输出信息中,第一行为列表标题,其中各字段的含义描述如下。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
%CPU:CPU 占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START:启动该进程的时间。
TIME:该进程占用的 CPU时间。
COMMAND:启动该进程的命令的名称。

1.2. ps -elf 命令

执行“ps -elf”命令,则将以长格式显示系统中的进程信息,并且包含更丰富的内容。如下:
在这里插入图片描述
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
**SZ:**假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。

1.3.常见的进程状态

进程说明
-D不可被唤醒的睡眠状态,通常用于 I/O 情况
-R该进程正在运行
-S该进程处于睡眠状态,可被唤醒
-T停止状态,可能是在后台暂停或进程处于除错状态
-W内存交互状态(从 2.6 内核开始无效)
-X死掉的进程(应该不会出现)
-Z僵尸进程。进程已经中止,但是部分程序还在内存当中
-<高优先级(以下状态在 BSD 格式中出现)
-N低优先级
-L被锁入内存
-s包含子进程
-l多线程
-+位于后台
-C进程占用CPU的百分比

1.4.僵尸进程

一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变
成僵尸进程,因为每个进程结束的时候,系统都会扫描当
前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵厂进程。
总结来说:父进程退出子进程没有退出那么这些子进程就没有父进程来管理了,就变成僵尸进程。

2.查看进程信息top

在这里插入图片描述

上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
17:47:26 当前时间
up 1:24 系统运行时间 ,说明此服务器运行一小时24分钟了
2 users 当前登录用户数
load average: 0.00, 0.01, 0.08 系统负载,即任务队列的平均长度。 三个数值分别为 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,可用物理空间。

top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按 s 修改刷新时间,按空格 :立即刷新。
P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

3.查看进程信息pgrepp

根据特定条件查询进程PID信息
常用的参数
-l:选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程

[root@localhost ~]#pgrep -l "sys"		//查询进程名中包含“sys”的进程及PID号
1 systemd
4298 systemd-journal
4335 systemd-udevd
8724 systemd-logind
9373 rsyslogd
[root@localhost ~]#pgrep -l -U root -t tty1		//查询由用户在tty1终端上运行的进程及PID号:
9593 X

4.查看进程树pstree

结合以下常用的参数使用:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
在这里插入图片描述

三、控制进程

1.进程的启动方式

1.1 手工启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。

  • 前台启动:用户输入命令,直接执行程序
  • 后台启动:在命令行尾加入“&”符号

例如,从光盘中制作镜像文件时,由于复制量比较多,耗时较长,可以使用“&”来将进程放入后台运行,以便可以继续执行其他操作。

[root@localhost ~]#cp /dev/cdrom mycd.iso &
[1] 5959		//输出结果中包括后台任务序号及PID号

1.2 调度启动进程

在服务器维护工作中,经常需要执行数据备份的任务,一般来说比较费时且占用资源,这时候我们可以计划在夜间进行。这时候就需要用户事先进行调度安排,指定任务运行的时间,当到达设定的时间会自动启动并完成指定的任务。调度启动的计划任务进程都在后台运行,不会占用用户的命令终端。

  • 可以使用 at 和crontab 命令设置
  • at 命令用于设置一次性计划任务
  • crontab 命令用于设置周期性运行的计划任务

2.改变进程的运行方式

CTRL + Z 组合键:将当前进程挂起,即调入后台并停止执行
Jobs命令:查看后台的任务列表(只能在当前使用的终端可以查询)
fg命令:将后台进程恢复到前台运行,可指定任务序号

[root@localhost ~]#vim cui.txt		//进入编辑,Ctrl+z进入后台运行

[1]+  已停止               vim cui.txt
[root@localhost ~]#jobs -l		//查看后台任务
[1]+ 22628 停止                  vim cui.txt
[root@localhost ~]#fg 1		//将编辑cui.txt进程恢复至前台运行
vim cui.txt

3.终止进程执行kill

当用户在前台执行某个进程时,可以按 ctrl +c 组合键强制执行终端(如命令长时间没有响应的情况)。如果使用ctrl+c组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程终止工具 kill 、killall、pkill 。

  • 使用 kill 命令终止进程,需要使用进程的PID号作为参数,结合“-9”选项可以强制终止进程,但是强制终止进程可能会导致部分数据丢失,所以不到不得已的情况时不要轻易使用。
  • 使用 killall 命令终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令更加方便,效率更高。
  • 使用 pkill 命令终止进程,可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特点的进程,大部分选项和 pgrep 命令基本相似,如-U 指定用户、-t指定终端等。
[root@localhost ~]#vim cui.txt

[1]+  已停止               vim cui.txt
[root@localhost ~]#jobs -l
[1]+ 22804 停止                  vim cui.txt
[root@localhost ~]#kill -9 22804		//强制终止进程
[root@localhost ~]#jobs -l
[1]+ 22804 已杀死               vim cui.txt



[root@localhost ~]#vim cui.txt

[1]+  已停止               vim cui.txt
[root@localhost ~]#vim cui1.txt

[2]+  已停止               vim cui1.txt
[root@localhost ~]#jobs -l
[1]- 22829 停止                  vim cui.txt
[2]+ 22830 停止                  vim cui1.txt
[root@localhost ~]#killall -9 vim		//强制终止所有vim进程
[1]-  已杀死               vim cui.txt
[2]+  已杀死               vim cui1.txt




[root@localhost ~]#pgrep -l -U cuipw
22939 bash
22981 vim
[root@localhost ~]#pkill -9 -U cuipw		//终止用户cuipw
已杀死

四、计划任务管理

1.一次性计划任务at

使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后, 否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数.

[root@localhost ~]#at 18:50
at> shutdown -h now
at> <EOT>			//任务设置完毕后按Ctrl+D提交
job 2 at Mon Aug 23 18:50:00 2021
[root@localhost ~]#atq
2	Mon Aug 23 18:50:00 2021 a root

对于已经设置但还未执行(未到时间点)的计划任务,可以通过 atq 命令进行查询。
若要删除指定编号的 at 任务,可以使用 atrm 命令。删除后的 at 任务将不会被执行, 并且不会显示在 atq 命令的显示结果中,但已经执行过的任务无法删除。

2.周期性任务设置crontab

2.1 主要设置文件

  • 全局配置文件——位于文件/etc/crontab
  • 系统默认的设置——位于/etc/cron.*/
  • 用户定义的设置——位于/var/spool/cron/

2.2 管理crontab任务计划

crondtab 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。
常用的选项如下:
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-l:列表显示计划任务。
-r:删除计划任务列表。
除此之外:
“*”表示该范围内的任意时间。
“,”表示一个间隔内的多个不连续时间点。
“-”表示一个连续的时间范围。
“/”表示间隔的时间频率。

[root@localhost ~]# crontab -e
30 8 * * * /usr/bin/systemctl start httpd.service
//分 时 日 月 周 

分钟 取值为从0到59之间的任意整数
小时 取值为从0到23之间的任意整数
日期 取值为从1到31之间的任意整数
月份 取值为从1到12之间的任意整数
星期 取值为从0到7之间的任意整数,0或7代表星期日
命令 要执行的命令或程序脚本\

总结

Linux 系统的多任务环境决定了进程管理的重要性,及时查看并清除占用较高的进程有利于提高工作的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值