5)bg 任务序号,将一个在后台暂停的任务,变成继续执行。
[root@localhost ~]# dd if=/dev/zero of=/data/aa/f1 bs=1G count=10 //执行后,使用ctrl+z将该进程挂起 ^Z [1]+ 已停止 dd if=/dev/zero of=/data/aa/f1 bs=1G count=10 [root@localhost ~]# jobs //查看后台任务列表,任务是停止状态 [1]+ 已停止 dd if=/dev/zero of=/data/aa/f1 bs=1G count=10 [root@localhost ~]# bg 1 //让暂停的后台任务,变成继续执行 [1]+ dd if=/dev/zero of=/data/aa/f1 bs=1G count=10 & [root@localhost ~]# jobs //查看任务列表,进程是运行状态 [1]+ 运行中 dd if=/dev/zero of=/data/aa/f1 bs=1G count=10 & 复制代码
6 进程的优先级设置
每个CPU在一个时间点上只能处理一个进程,通过时间分片技术,来同时运行多个进程。每个进程都有相应的优先级,优先级决定它何时运行和接收多少 CPU 时间。
在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice。数值越小,优先级越高,该进程越优先被 CPU 处理。
不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。
PRI 和 NI 的关系如下:
PRI (最终值) = PRI (原始值) + NI 复制代码
修改 NI 值时有几个注意事项:
- NI 范围是 -20~19。
- 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
- 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
- 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。
6.1 启动具有不同nice级别的进程——nice命令
启动进程时,进程通常会继承父进程的nice级别,默认为0。
可以在启动程序时,加上nice命令来设置程序运行的优先级。
nice命令:
nice -n 优先级 命令 复制代码
示例:
在启动程序时,设置程序的nice级别为 -5。
[root@localhost ~]# nice -n -5 dd if=/dev/zero of=/data01/f1 bs=500M count=20 & //启动程序时,设置nice级别为-5 [1] 89002 [root@localhost ~]# top -p 89002 复制代码
6.2 更改现有进程的nice级别——renice命令
renice命令格式:
renice -n 优先级 -p PID //修改现有进程的nice级别 复制代码
示例:
sshd进程的当前nice级别为0,使用renice命令修改为-10。
[root@localhost ~]# top -p 68219 //查看68219进程的nice级别,为0 [root@localhost ~]# renice -n -10 -p 68219 //将68219进程的nice级别修改为-10 68219 (进程 ID) 旧优先级为 0,新优先级为 -10 [root@localhost ~]# top -p 68219 //修改后的nice级别为-10 复制代码
7 结束进程
7.1 kill命令
kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
命令格式:
kill [信号] PID #kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。 Linux 定义了几十种不同类型的信号,可以使用 kill -l 命令查看所有信号及其编号。 复制代码
常用信号:
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |
3 | QUIT | 退出。键盘退出使用 "Ctrl+\ "。 |
9 | KILL | 杀死进程,即强制结束进程。 |
11 | SEGV | 段错误。 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号。 |
18 | CONT | 继续。 |
19 | STOP | 暂停。 |
示例:
[root@localhost data]# sleep 400 & //将程序放到后台执行,PID118477 [1] 118477 [root@localhost data]# jobs //查看后台任务列表,进程在运行中 [1]+ 运行中 sleep 400 & [root@localhost data]# kill -9 118477 //杀死PID为118477的进程 [root@localhost data]# jobs //查看后台任务列表,进程已被杀死 [1]+ 已杀死 sleep 400 复制代码
7.2 killall命令
killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
命令格式:
killall [选项] [信号] 进程名 复制代码
常用选项:
- -i:交互式,询问是否要杀死某个进程。
- -I:忽略进程名的大小写。
示例:
[root@localhost ~]#killall -i sshd //以交互方式杀死sshd 复制代码
7.3 pkill命令
当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,该命令的基本格式如下:
命令格式:
pkill [信号] 进程名 复制代码
pkill命令踢出登陆用户:
pkill [-U 用户名] 进程名 pkill [-t 终端号] 进程名 -U:根据进程所属的用户名终止相应进程 -t:根据进程所在的终端终止相应进程 复制代码
示例:
[root@localhost ~]# pgrep -l -u nancy //查看nancy用户的进程,并显示进程名 57564 bash [root@localhost ~]# pkill -9 -U nancy //杀死nancy用户的进程 [root@localhost ~]# pgrep -l -u nancy //查看nancy用户的进程,已无数据 复制代码
8 计划任务管理
8.1 at一次性任务设置
at 工具介绍:
- 由包 at 提供
- 依赖与atd服务,需要启动才能实现at任务
- at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
- 执行任务时PATH变量的值和当前定义任务的用户身份一致
at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:
- 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
- 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
- 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可。
at 设置任务
at [选项] [时间] at [HH:MM] [yyyy-mm-dd] #设置具体任务后,按 ctrl+d 提交 。 #若设置具体任务时,想要退格重写,按ctrl+backspace进行退格。 复制代码
查询和删除at任务:
atq //查看at任务列表 atrm [工作号] //删除指定的at任务 复制代码
时间格式说明:
格式 | 用法 |
HH:MM | 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 |
Midnight(midnight) | 代表 12:00 AM(也就是 00:00)。 |
Noon(noon) | 代表 12:00 PM(相当于 12:00)。 |
Teatime(teatime) | 代表 4:00 PM(相当于 16:00)。 |
英文月名 日期 年份 | 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。 |
MMDDYY、MM/DD/YY、MM.DD.YY | 比如 011518 表示 2018 年 1 月 15 号。 |
now+时间 | 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。 |
常用时间格式:
HH:MM //在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务 02:00 //表示在今天2点执行任务,若2点已过,则在明天2点执行 HH:MM YYYY-MM-DD //规定在某年某月的某一天的特殊时刻进行该项任务 02:00 2022-06-30 //在2022年6月30日执行该项任务 HH:MM[am|pm] [Month] [Date] //指定上午或下午 06pm March 17 //3月17日下午6点执行 HH:MM[am|pm] + number [minutes|hours|days|weeks] //在某个时间点再加几个时间后才进行该项任务 now+5min //5分钟后执行该项任务 02pm+3days //在3天后的下午2点执行该项任务 复制代码