进程和计划任务管理
进程和计划任务管理
1.查看和控制进程
程序和进程的关系
v程序
■ 保存在硬盘、光盘等介质中的可执行代码和数据
■ 是静态保存的代码
v进程
■ 在CPU及内存中运行的程序代码
■ 是动态执行的代码
■ 父、子进程:每个进程可以创建一个或多个进程
#例如提供Web服务的httpd程序,当有大量用户同时访问web页面时,httpd程序可能会创建多个进程来提供服务
1.1查看进程
查看进程信息——ps
vps命令
■ 用途:查看静态的进程统计信息
■ 格式:ps aux
ps -elf
[root@localhost ~] # ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 2648 604 ? S Apr02 0:13 init [3] root 2 0.0 0.0 0 0 ? SN Apr02 0:00 [ksoftirqd/0] root 3 0.0 0.0 0 0 ? S< Apr02 0:19 [events/0] root 4 0.0 0.0 0 0 ? S< Apr02 0:00 [khelper] …… |
查看进程信息——top
vtop命令
■ 用途:查看动态的进程排名信息
[root@sky ~]
# top
top - 09:34:11 up 8 min, 1 user, load average: 0.00, 0.02, 0.01
Tasks: 111 total, 1 running, 109 sleeping, 1 stopped, 0 zombie
Cpu(s): 0.0
%
us, 0.7
%
sy, 0.0
%
ni
, 99.3
%
id, 0.0
%
wa, 0.0
%
hi, 0.0
%
si
, 0.0
%
st
Mem: 1004608k total, 317384k used, 687224k free, 34212k buffers
Swap: 2031608k total, 0k used, 2031608k free, 110080k cached
PID USER PR
NI
VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7 root 20 0 0 0 0 S 0.3 0.0 0:00.97 events/0
1567 root 20 0 181m 4468 3560 S 0.3 0.4 0:00.78 vmtoolsd
2705 root 20 0 15032 1220 952
R
0.3 0.1 0:00.01 top
1 root 20 0 19356 1536 1228 S 0.0 0.2 0:01.11 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
按P键根据CPU占用情况对进程列表进行排序
按M键根据内存占用情况进行排序
按N键根据启动时间进行排序
按h键可以获得top程序的在线帮助信息
按q键可以正常退出top程序
使用空格键可以强制更新进程状态显示
查看进程信息——pgrep
vpgrep命令
■ 用途:根据特定条件查询进程PID信息
[root@localhost ~] # pgrep "init" 1 [root@localhost ~] # pgrep -l "log" <==-l:显示进程名 2538 syslogd 2541 klogd 3221 login [root@localhost ~] # pgrep -l -U teacher -t tty1 <==-U:指定特定用户,-t:指定终端 27483 bash 27584 vim |
查看进程树——pstree
vpgrep命令
■ 用途:根据特定条件查询进程PID信息
[root@localhost ~] # pstree -aup <==-a:显示完整信息,-u:列出对应用户名,-p:列出对应PID号 init,1 ├─acpid,2866 ├─atd,3060 ├─auditd,2516 │ ├─python,2518 /sbin/audispd │ └─{auditd},2517 …… [root@localhost ~] # pstree -ap teacher bash,27483 └─vim,27674 myfile.txt |
1.2 控制进程
进程的启动方式
v手工启动
■ 前台启动:用户输入命令,直接执行程序
■ 后台启动:在命令行尾加入“&”符号
[root@localhost ~] # cp /dev/cdrom mycd.iso & [1] 28454 |
v调度启动
■ 使用at命令,设置一次性计划任务
■ 使用crontab命令,设置周期性计划任务
进程的前后台调度
vCtrl+Z 组合键
■ 将当前进程挂起,即调入后台并停止执行
vjobs命令
■ 查看处于后台的任务列表
vfg命令
■ 将处于后台的进程恢复到前台运行,需指定任务序号
[root@localhost ~] # jobs -l [1]- Stopped cp /dev/cdrom mycd.iso [2]+ Stopped top [root@localhost ~] # fg 1 |
终止进程的运行
vCtrl+C组合键
■ 中断正在执行的命令
vkill、killall命令
■ kill用于终止指定PID号的进程
■ killall用于终止指定名称的所有进程
■ -9 选项用于强制终止
[root@localhost ~] # pgrep -l "portmap" 2869 portmap [root@localhost ~] # kill -9 2869 [root@localhost ~] # killall -9 vim [1]- 已杀死 /usr/bin/vim file1 [2]- 已杀死 /usr/bin/vim file2 |
#若该进程已经无法响应终止信号,则可以结合“-9”选项强行杀死进程
#强制终止进程时可能会导致程序运行的部分数据丢失,因此不得以时不要轻易使用“-9”选项
vpkill命令
■ 用途:根据特定条件终止相应的进程
■ 常用命令选项:
● -U:根据进程所属的用户名终止相应进程
● -t:根据进程所在的终端终止相应进程
[root@localhost ~] # pgrep –l -U "zhangsan" 3045 bash [root@localhost ~] # pkill -9 -U "zhangsan” [root@localhost ~] # pgrep -l U "zhangsan” |
2.计划任务管理
2.1 at 一次性任务设置
vat命令
■ 一次性计划任务
■ 服务脚本名称:/etc/init.d/atd
■ 设置格式:at [HH:MM] [yyyy-mm-dd]
[root@localhost ~] # date 2011年 02月 21日 星期一 14:45:05 CST [root@localhost ~] # at 14:55 2011-02-21 at> pgrep -U root | wc -l > /tmp/ ps .root at> <EOT> <==任务设置完毕后按Ctrl+D组合键提交 job 1 at 2011-02-21 14:55 [root@localhost ~] # cat /tmp/ps.root <==等过了计划任务时间后验证命令结果 63 |
v案例:
■ 在当天的21:30时自动关闭当前系统
[root@localhost ~] # at 21:30 at> shutdown -h now at> <EOT> job 7 at 2011-02-21 21:30 |
[root@localhost ~] # atq <==查看未执行的任务列表 1 2011-02-21 14:55 a root 2 2011-02-21 21:30 a root |
[root@localhost ~] # atrm 2 <==删除第2条任务 [root@localhost ~] # atq 1 2011-02-21 14:55 a root |
2.2 crontab 周期性任务设置
计划任务管理——crond
vcrontab命令
■ 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务
■ 服务脚本名称:/etc/init.d/crond
■ 主要设置文件
● 全局配置文件,位于文件:/etc/crontab
● 系统默认的设置,位于目录:/etc/cron.*/
● 用户定义的设置,位于文件:/var/spool/cron/用户名
[root@localhost ~]
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run
-parts
/etc/cron.hourly
02 4 * * * root run
-parts
/etc/cron.daily
22 4 * * 0 root run
-parts
/etc/cron.weekly
42 4 1 * * root run
-parts
/etc/cron.monthly
#每小时、每天、每星期、每月定期执行的任务脚本分别存放在这些目录中
#启用周期性任务有一个前提条件,即对应的系统服务crond必须已经运行
#全局配置和系统默认配置中的内容一般不需要用户去修改,用户只需设置/var/spool/cron/目录下与本帐号同名的文件即可
v管理cron计划任务
■ 编辑计划任务:crontab -e [-u 用户名]
■ 查看计划任务:crontab -l [-u 用户名]
■ 删除计划任务:crontab -r [-u 用户名]
#root用户可以管理指定用户的计划任务,普通用户只能管理自己的计划任务
#用户只需执行“crontab -e”命令后会自动调用文本编辑器(默认为vi)并打开“/var/spool/cron/用户名”文件,无需手动指定文件位置
crontab任务配置的格式
#前面5个字段用于指定任务重复执行的时间规律,第6个字段用于指定具体的任务内容
#crontab任务配置记录中,所设置的命令在“分钟+小时+日期+月份+星期”都满足的条件下才会运行
v时间数值的特殊表示方法
■ * 表示该范围内的任意时间
■ , 表示间隔的多个不连续时间点
■ - 表示一个连续的时间范围
■ / 指定间隔的时间频率
v应用示例
■ 0 17 * * 1-5 周一到周五每天17:00
■ 30 8 * * 1,3,5 每周一、三、五的8点30分
■ 0 8-18/2 * * * 8点到18点之间每隔2小时
■ 0 * */3 * * 每隔3天
crontab应用示例
v示例1(root用户):
■ 每天早上7:50自动开启sshd服务,22点50时关闭
■ 每隔5天清空一次FTP服务器公共目录/var/ftp/pub
■ 每周六的7:30时,重新启动httpd服务
■ 每周一、三、五的17:30时,打包备份/etc/httpd目录
[root@localhost root] # crontab -e 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 0 */5 * * /bin/ rm –rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/ |
v示例2(jerry用户)
■ 每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件
[root@localhost root] # crontab -e -u jerry 55 23 * * 7 /bin/ cp /etc/passwd /home/jerry/ pwd .txt |
v示例3:
■ root用户查看自己的计划任务列表
■ 查看并删除jerry用户设置的计划任务
[root@localhost root] # crontab -l <==查看root用户自己的计划任务列表 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 * */5 * * /bin/ rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd |
[root@localhost root]
# crontab -l -u jerry <==查看用户jerry的计划任务
55 23 * * 7 /bin/
cp
/etc/passwd /home/jerry/
pwd
.txt
[root@localhost root]
# crontab -r -u jerry <==删除用户jerry的计划任务
[root@localhost root]
# crontab -l -u jerry
no crontab for jerry
[root@localhost root]
#