进程和计划任务管理
一程序和进程的关系
(1) 程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
(2) 进程
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
l 每个程序可以创建一个或多个进程
二查看进程信息
(1) 查看进程命令 ps 命令
查看静态的进程统计信息
- 示例ps -aux
- 示例ps -elf
- 选项解释
选项 |
解释 |
-e |
显示系统内的所有进程信息 |
-l |
使用长格式显示进程信息 |
-f |
使用完整的格式显示进程信息。 |
-a |
显示终端上的所有进程,包括其他用户的进程 |
-u |
表示列出进程的用户 |
-x |
显示所有终端的进程 |
- 详细信息解释
名称 |
解释 |
||||||||||
USER |
进程的用户 |
||||||||||
PID |
进程的ID |
||||||||||
%CPU |
进程占用的CPU百分比 |
||||||||||
%MEM |
占用内存的百分比 |
||||||||||
VSZ |
该进程使用的虚拟内存量(KB) |
||||||||||
RSS |
该进程占用的物理内存量(KB) |
||||||||||
TTY |
启动进程的终端名。不是从终端启动的进程则显示为 ? |
||||||||||
STAT |
该行程的状态
|
||||||||||
START |
该进程被触发启动时间 |
||||||||||
TIME |
该进程实际使用CPU运行的时间 |
||||||||||
COMMAND |
进程的启动命令 |
(2) 查看进程top命令(动态)
- 示例
第一行 |
任务队列信息 |
11:19:34 |
系统时间 |
up 1:11 |
系统已运行时长 |
2 Users |
当前登录用户数 |
load average: 0.00, 0.01, 0.02 |
系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值 |
第二行 |
进程信息 |
Tasks |
总进程数 |
running |
正在运行的进程数 |
sleeping |
休眠的进程数 |
stopped |
中止的进程数 |
zombie |
僵死的进程数 |
第三行 |
CPU的信息 |
us |
用户占用 |
sy |
内核占用 |
ni |
优先级调度占用 |
id |
空闲CPU,要了解空闲的 CPU 百分比,主要看%id 部分 |
wa |
I/O 等待占用 |
hi |
硬件中断占用 |
si |
软件中断占用 |
st |
虚拟化占用 |
第四行 |
内存的信息 |
total |
总内存空间 |
free |
空闲内存 |
used |
已用内存 |
buff/cache |
物理内存和交换内存的缓冲区总和 |
第五行 |
交换空间的信息 |
total |
总内存空间 |
free |
空闲交换空间 |
used |
已用交换空间 |
avail Mem |
可用物理空间 |
- 各行标志内容
名称 |
解释 |
PID |
进程id |
USER |
进程所有者的用户名 |
PR |
优先级 |
NI |
谦让度值。负值表示高优先级,正值表示低优先级 |
VIRT |
进程使用的虚拟内存总量,单位kb |
RES |
进程使用的物理内存大小,单位kb |
SHR |
共享内存大小,单位kb |
S |
进程状态 |
%CPU |
上次更新到现在的CPU时间占用百分比 |
%MEM |
进程使用的CPU时间总计,单位1/100秒 |
TIME+ |
COMMAND |
- top常用命令
名称 |
解释 |
P 键 |
根据CPU使用百分比大小进行排序 |
M 键 |
根据驻留内存大小进行排序 |
N 键 |
根据启动时间进行排序 |
c 键 |
切换显示命令名称和完整命令行 |
h 键 |
可以获得 top程序的在线帮助信息 |
k 键 |
根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程 |
q 键 |
退出 top 程序 |
数字1 键 |
显示CPU个数和状态 |
%CPU |
上次更新到现在的CPU时间占用百分比 |
%MEM |
进程使用的CPU时间总计,单位1/100秒 |
TIME+ |
COMMAND |
三 查看进程信息
(1) 查看进程信息pgrep命令
- 常用选项
选项 |
意义 |
l |
进程关键字 |
U |
指定特定用户 |
t |
指定终端 (使用较少) |
- 示例
创建一个新用户admin,并创建密码,切换用户admin,创建vim进程
复制会话查询现虚拟机中的进程
三 查看进程树
(2) 查看进程树pstree命令
1. 常用选项
选项 |
意义 |
-a |
显示完整信息 |
-u |
列出对应用户名 |
-p |
列出对应PID号 |
- 示例
先在1centos7-1中使用admin用户创建一个文件,并进入编辑
再进入复制会话中去以树形结构完整列出用户admin的进程号,进程名称
四 进程的启动方式
(1)手工启动
1. 手工启动
①前台启动:用户输入命令,直接执行程序
②后台启动:在命令行尾加入“&”符号
2. 示例
使用本地磁盘cdrom内部的文件,使用磁盘,先挂载,然后统计一下/mnt目录内部空间占用情况很大,然后复制/mnt目录包括目录下所有文件到/opt目录中,可以看到因为非常大,需要等待
(2)调度启动
①使用at命令,设置一次性计划任务
②使用crontab命令,设置周期性计划任务
- 进程的前后台调度
①Ctrl+z组合键
将当前程序挂起,即调入后台并停止执行
②jobs命令
jobs 【-l】
查看处于后台的任务列表
③fg命令
将后台进程恢复到前台运行,可指定任务序号
五 终止进程的运行
(一) ctrl c、kill、killall ctrl+c组合键
①中断正在执行的命令
(二) kill、killall命令
① kill用于终止指定PID号的进程
② killall用于终止指定名称相关的所有进程
③-9选项用于强制终止
(三) pkill
根据特定条件终止相应的进程
(四) 常用命令选项
①-U:根据进程所属的用户名终止相应进程
② -t:根据进程所在的终端终止相应程序
六 计划任务管理at
●at命令
一次性计划任务
- 示例
at 【HH:MM】【yyyy-mm-dd】
- 命令格式
[root@localhost~]#at 21:30 #不跟年月日,表示使用当前日期
at> shutdown -h now
ctrl d #提交一次性计划任务
at> <EOT>
job 2 at Sun May 7 21:30:00 2017
[root@localhost~]# atq #查看未执行的任务列表
[root@localhost~]# atrm 1 #删除第一条任务
七 计划任务管理crontab(重点)
(一)crontab命令
- 按照预先设置的时间周期(分、时、日、月、周)重复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
(二)管理crontab计划任务
- 查看计划任务
crontab -e 【-u 用户名】 -u缺省时默认当前用户
- 查看计划任务
crontab -l 【-u 用户名】
- 删除计划任务
crontab -r 【-u 用户名】
(三) crontab任务配置的格式
代表意义 |
分钟 |
小时 |
日期 |
月份 |
周 |
命令 |
数字范围 |
0~59 |
0~23 |
1~31 |
1~12 |
0~7 |
需要执行的命令 |
周的数字为 0 或 7 时,都代表“星期天”的意思。
(四)时间数值的特殊表示方法
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/表示间隔的时间频率
应用示例
0 17 * * 1-5 周一到周五每天17点
30 8 * * 1,3,5 周一,周三,周五8.30
0 8-18/2 * * * 8点到18点每两小时
0 * */3 * * 每三天
crontab -e [-u root] 编辑一个计划任务
1.每分钟定时执行一次规则:
每1分钟执行: */1 * * * *或者* * * * *
每5分钟执行: */5 * * * *
2.每小时定时执行一次规则:
每小时执行: 0 * * * *或者0 */1 * * *
每天上午7点执行:0 7 * * *
每天上午7点10分执行:10 7 * * *
3.每天定时执行一次规则:
每天执行 0 0 * * *
4.每周定时执行一次规则:
每周执行 0 0 * * 0
5.每月定时执行一次规则:
每月执行 0 0 1 * *
6.每年定时执行一次规则:
每年执行 0 0 1 1 *
其他例子
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
方法二:
echo ‘30 7 * * 6 /usr/bin/systemctl httpd restart’ >> /var/spool/cron/root