Linux 进程管理 第8天

进程和程序的区别
1、程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动
态概念,有一定的生命期,是动态产生和消亡的。
2、程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方面,一个进程在活
动中有可顺序地执行若干个程序。
一个程序可以对应多个进程——动态进程负载
[root@helen ~]# /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
[root@helen ~]# ps -le | grep httpd
1 S
0 6730
1 1 78 0 – 5639 -
?
00:00:00 httpd
5 S
48 6732 6730 0 85 0 – 5639 322810 ?
00:00:00 httpd
5 S
48 6733 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6734 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6735 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6736 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6737 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6738 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 6739 6730 0 85 0 – 5639 semtim ?
00:00:00 httpd
一个进程也可以包含多个顺序执行的程序
[root@helen ~]# date;pwd;ls -l
2011 年 02 月 24 日 星期四 07:54:04 CST
/root
总计 876
-rw——- 1 root root 1010 02-22 23:16 anaconda-ks.cfg
-rw-r–r– 1 root root 17049 02-22 23:16 install.log
-rw-r–r– 1 root root 4127 02-22 23:15 install.log.syslog
drwx—— 5 root root 4096 2010-06-14 john-1.7.6
-rw-r–r– 1 root root 832790 2011-03-01 john-1.7.6.tar.gz
父进程与子进程
1、子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程。
2、在 Linux 系统中,使用系统调用 fork 创建进程。fork 复制的内容包括父进程的数据和
堆栈段以及父进程的进程环境。
3、父进程终止子进程自然终止。
父进程终止子进程自然终止
[root@helen ~]# ps -le | grep httpd
1 S
0 6730
1 0 78 0 – 5639 -
?
00:00:00
5 S
48 6732 6730 0 85 0 – 5639 322810 ?
00:00:00
5 S
48 6733 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6734 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6735 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6736 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6737 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6738 6730 0 85 0 – 5639 semtim ?
00:00:00
5 S
48 6739 6730 0 85 0 – 5639 semtim ?
00:00:00
UID 为 0 不应答任何请求
UID 不为 0 响应请求
[root@helen ~]# grep 48 /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
[root@helen ~]# kill 6730
[root@helen ~]# ps -le | grep httpd(干掉父进程,多个子进程关闭)
[root@helen ~]#
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
[root@helen test]# ls 前台进程
[root@helen test]# find / -name init* > /root/find.init &(后台执行非交互性命令
才有意义)
[1] 6825
前台进程和后台进程
前台进程:
在 Shell 提示处打入命令后,创建一个子进程,运行命令,Shell 等待命令退出,然后
返回对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不
能执行另一个命令。
后台进程:
在 Shell 提示处打入命令,若后随一个&,Shell 创建的子进程运行此命令,但不等待命令
退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。后台进
程必须是非交互式的。
进程状态
就绪:
进程已经分配到资源,
但因为其它进程正占用 CPU,
所以暂时不能运行而等待分配 CPU
的状态。
等待:因等待某种事件而暂时不能运行的状态。
运行:进程分配到 CPU,正在处理器上运行。

 

进程状态细化
用户态运行:在 CPU 上执行用户代码
核心态运行:在 CPU 上执行核心代码
在内存就绪:具备运行条件,只等调度程序为它分配 CPU
在内存睡眠:因等待某一事件的发生,而在内存中排队等待
在外存就绪:就绪进程被交换到外存上继续处于就绪状态
在外存睡眠:睡眠进程被交换到外存上继续等待
在内存暂停:因调用 stop 程序而进入跟踪暂停状态,等待其父进程发送命令。
在外存暂停:处于跟踪暂停态的进程被交换到外存上
创建态:新进程正在被创建、但尚未完毕的中间状态
终止态:进程终止自己
查看用户信息 w
w 显示信息的含义
JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的 CPU 时间会显示
在这里
PCPU:CPU 执行程序耗费的时间
WHAT:用户正在执行的操作
load average:分别显示系统在过去 1、5、15 分钟内的平均负载程度。
FROM:显示用户从何处登录系统,
“:0”的显示代表该用户时从 X Window 下,打开文
本模式窗口登录的
IDLE:用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
查看个别用户信息:w 用户名
[root@helen test]# w
08:00:51 up 4:45, 2 users, load average: 0.22, 0.07, 0.02
USER
TTY
FROM
LOGIN@ IDLE
JCPU PCPU WHAT
root
tty1
-
03:18
4:33m 0.46s 0.03s man useradd
root
pts/0
192.168.9.254
03:19
0.00s 0.94s 0.02s w
[1]+ Done
find / -name init* > /root/find.init
IDLE:空闲时间
up 4:45 指的是 uptime,系统运行时间长短,没有重启和关机
load average: 0.22, 0.07, 0.02 负载值 1、5、15 分钟平均负载程度,平均负载值小于 0.8
认为系统负载较轻
WHAT
-bashi 什么都没做
man useradd
PCPU
当前运行进程消耗时间
JCPU
总执行进程消耗时间
[root@helen ~]# w samlee
21:37:49 up 1:21, 3 users, load average: 0.46, 0.11, 0.03
USER
TTY
FROM
LOGIN@ IDLE
JCPU PCPU WHAT
samlee tty1
-
21:37
5.00s 0.05s 0.05s -bash
samlee pts/1
192.168.0.104
21:36
1:14 0.07s 0.07s -bash
[root@localhost root]# w root
01:02:23 up 7 min, 3 users, load average: 0.01, 0.20, 0.14
USER
TTY
FROM
LOGIN@ IDLE
JCPU PCPU WHAT
root
tty1
-
12:56am 6:07
2.19s 0.01s /bin/sh
/usr/X11R6/bin/startx
root
pts/0
:0.0
12:58am 2:07 0.05s 0.05s bash
root
pts/1
localhost
1:00am 0.00s 0.03s 0.01s w root
FROM
:0.0 图形登录
-本地登录
查看系统中的进程 ps
常用选项
a:显示所有用户的进程
u:显示用户名和启动时间
U<用户名称> 列出属于该用户的程序的状况。
x:显示没有控制终端的进程
e:显示所有进程,包括没有控制终端的进程
l:长格式显示
w:宽行显示,可以使用多个 w 进行加宽显示
ps process state
ps -aux BSD
ps -le 贝尔实验室系统
ps 常用输出信息的含义
PID:进程号
PPID:父进程的进程号
TTY:进程启动的终端
STAT:进程当前状态
S 休眠状态,D 不可中断的休眠状态,R 运行状态,Z 僵死状态,T 停止
NI:进程优先级
TIME:进程自从启动以来启用 CPU 的总时间
COMMAND/CMD:进程的命令名
USER:用户名
%CPU:占用 CPU 时间和总时间的百分比
%MEM:占用内存与系统内存总量的百分比
ps 应用实例
#ps 查看隶属于自己的进程
#ps -u or -l 查看隶属于自己进程详细信息
#ps -le or -aux 查看所有用户执行的进程的
详细信息
[root@helen ~]# ps
PID TTY
TIME CMD
2514 pts/0
00:00:00 bash
2581 pts/0
00:00:00 su
[root@helen ~]# ps u
USER
PID %CPU %MEM
VSZ RSS TTY STAT START TIME COMMAND
root
2423 0.0 0.1
1664 424 tty2 Ss+ 20:18 0:00 /sbin/mingetty tty2
[root@helen ~]# ps l
F S UID
PID PPID C PRI NI ADDR SZ WCHAN TTY
TIME CMD
4 S
0 2514 2512 0 76 0 – 1411 wait pts/0
00:00:00 bash
[root@helen ~]# ps u (可不加-)
USER
PID %CPU %MEM
VSZ RSS TTY
STAT START TIME COMMAND
root 2423 0.0 0.1 1664 424 tty2
Ss+ 20:18 0:00 /sbin/mingetty tty2
STAT 进程状态
S-sleeping D-Dropsleeping R-Running z-zombie T-sTopped(挂起、暂停)
NI 进程优先级 nice 优先级越小优先权越大,可为负数
[root@helen ~]# ps aux
USER
PID %CPU %MEM
VSZ RSS TTY
STAT START TIME COMMAND
root
1 0.0 0.2
2072 632 ?
Ss
20:15 0:01 init [3]
root
2 0.0 0.0
0
0 ?
S<
20:15 0:00 [migration/0]
[root@helen ~]# ps -le
F S UID
PID PPID C PRI NI ADDR SZ WCHAN TTY
TIME CMD
4 S
0
1
0 0 75 0 – 518 -
?
00:00:01 init
1 S
0
2
1 0 -40 – -
0 migrat ?
00:00:00 migration/0
[root@helen ~]# ps -le | grep ssh
5 S
0 2226
1 0 75 0 – 1767 -
?
00:00:00 sshd
4 S
0 2512 2226 0 75 0 – 2480 -
?
00:00:02 sshd
[root@helen ~]# ps aux | grep samlee
root
2828 0.0 1.0
9920 2788 ?
Ss 21:36 0:00 sshd: samlee [priv]
samlee
2830 0.0 0.6
9920 1604 ?
S
21:36 0:00 sshd: samlee@pts/1
[root@helen ~]# ps uU samlee
USER
PID %CPU %MEM
VSZ RSS TTY
STAT START TIME COMMAND
samlee
2882 0.0 0.5
5648 1444 tty1
Ss+ 21:37 0:00 -bash
samlee
3251 0.1 0.6
9920 1604 ?
S
22:18 0:00 sshd: samlee@pts/1
samlee
3252 0.2 0.5
5644 1396 pts/1
Ss+ 22:18 0:00 -bash
[root@helen ~]# kill 3251
[root@helen ~]# ps aux | grep ^samlee | grep sshd:
samlee
3284 0.0 0.6
9920 1604 ?
S
22:18
0:00 sshd: samlee@pts/1
[root@helen ~]#
1 S
0 3335
5 S
48 3337
5 S
48 3338
5 S
48 3339
5 S
48 3340
5 S
48 3341
5 S
48 3342
5 S
48 3343
5 S
48 3344
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
ps -le
1
3335
3335
3335
3335
3335
3335
3335
3335
|
1
0
0
0
0
0
0
0
0
grep
78
81
84
85
84
84
85
85
85
httpd
0 -
0 -
0 -
0 -
0 -
0 -
0 -
0 -
0 -
5641
5641
5641
5641
5641
5641
5641
5641
5641
-
322810
semtim
semtim
semtim
semtim
semtim
semtim
semtim
?
?
?
?
?
?
?
?
?
kill–杀死进程
为什么要杀死进程
该进程占用了过多的 CPU 时间
该进程缩住了一个终端,使其他前台进程无法运行
运行时间过长,但没有预期效果
产生了过多到屏幕或磁盘文件的输出
无法正常退出
kill–关闭进程
关闭进程:kill 进程号
kill-9 进程号(强行关闭)
kill-1 进程号(重启进程)
关闭图形程序:xkill
结束所有进程:killall
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
查找服务进程号:pgrep 服务名称
关闭进程:pkill 进程名称
[root@helen ~]# kill 3335
[root@helen ~]# ps -le | grep httpd
[root@helen ~]#
[root@helen ~]# w
22:25:12 up 2:09, 3 users, load average: 0.06, 0.02, 0.00
USER
TTY
FROM
LOGIN@ IDLE
JCPU PCPU WHAT
samlee tty1
-
21:37
7:51 0.07s 0.07s -bash
root
pts/0
192.168.0.104
20:19
0.00s 1.68s 0.02s w
samlee pts/1
192.168.0.104
22:18
6:15 0.05s 0.05s -bash
[root@helen ~]# ps aux | grep samlee
root
2879 0.0 0.5
2888 1408 ?
Ss
21:37 0:00 login — samlee
samlee
2882 0.0 0.5
5648 1444 tty1
Ss+ 21:37 0:00 -bash
root
3282 0.0 1.0
9920 2788 ?
Ss 22:18 0:00 sshd: samlee [priv]
samlee
3284 0.0 0.6
9920 1604 ?
S
22:18 0:00 sshd: samlee@pts/1
samlee
3285 0.0 0.5
5644 1392 pts/1
Ss+ 22:18 0:00 -bash
root
3357 0.0 0.2
5028 700 pts/0
R+
22:26 0:00 grep samlee
[root@helen ~]# ps aux | grep samlee | grep pts/1
samlee
3284 0.0 0.6
9920 1604 ?
S
22:18 0:00 sshd: samlee@pts/1
samlee
3285 0.0 0.5
5644 1392 pts/1
Ss+ 22:18 0:00 -bash
[root@helen ~]# kill 3284
[root@helen ~]#
[root@helen ~]# kill -l
列出所有关闭的信号
1) SIGHUP 9) SIGKILL
# kill -1 进程号
重启进程
# kill -9 进程号
强制关闭进程
[root@helen ~]# /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
[root@helen ~]# service httpd status
httpd (pid 2631) 正在运行…
[root@helen ~]# ps -le | grep httpd
1 S
0 2631
1 1 78 0 – 5639 -
?
00:00:00 httpd
5 S
48 2633 2631 0 79 0 – 5639 322810 ?
00:00:00 httpd
5 S
48 2634 2631 0 80 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2635 2631 0 79 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2636 2631 0 79 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2637 2631 0 79 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2638 2631 0 84 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2639 2631 0 84 0 – 5639 semtim ?
00:00:00 httpd
5 S
48 2640 2631 0 84 0 – 5639 semtim ?
00:00:00 httpd
[root@helen ~]# kill -1 2631
[root@helen ~]# service httpd status
httpd (pid 2631) 正在运行…
[root@helen ~]# ps -le | grep httpd
5 S
0 2631
1 0 78 0 – 5852 -
?
00:00:00 httpd
5 S
48 2653 2631 0 76 0 – 5852 322810 ?
00:00:00 httpd
5 S
48 2654 2631 0 78 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2655 2631 0 79 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2656 2631 0 78 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2657 2631 0 78 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2658 2631 0 78 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2659 2631 0 83 0 – 5852 semtim ?
00:00:00 httpd
5 S
48 2660 2631 0 83 0 – 5852 semtim ?
00:00:00 httpd
[root@helen ~]# kill -9 2631
[root@helen ~]# service httpd status
httpd 已死,但 pid 文件仍存
[root@helen ~]# /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[失败]
[root@localhost root]# xkill 图形界面下关闭图形进程
Select the window whose client you wish to kill with button 1….
xkill: killing creator of resource 0×1000907
[root@helen ~]# service httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
[root@helen ~]# killall httpd (UNIX 不可用)
[root@helen ~]# service httpd status
httpd 已死,但是 subsys 被锁
[root@helen ~]# ps -le | grep httpd
[root@helen ~]#
查找服务进程号 pgrep
[root@helen ~]# cd /proc(存放在内存,包含系统运行当前进程信息,目录名为进程 ID)
[root@helen
1
144
[root@helen
[root@helen
proc]# ls
2007 2214 2388 2512 cpuinfo meminfo
proc]# cat cpuinfo
proc]# cat meminfo
[root@helen proc]# pgrep sshd
2313
2568
2597
2599
[samlee@helen ~]$ kill `pgrep
[root@helen ~]# service httpd
启动 httpd:
[root@helen ~]# ps -le | grep
1 S
0 2691
1 0 78
5 S
48 2693 2691 0 85
5 S
48 2694 2691 0 85
5 S
48 2695 2691 0 85
5 S
48 2696 2691 0 85
5 S
48 2697 2691 0 85
5 S
48 2698 2691 0 85
5 S
48 2699 2691 0 85
5 S
48 2700 2691 0 85
[root@helen ~]# pkill httpd
[root@helen ~]# ps -le | grep
[root@helen ~]# service httpd
httpd 已死,但是 subsys 被锁
sshd`
start
httpd
0 -
0 -
0 -
0 -
0 -
0 -
0 -
0 -
0 -
5641
5641
5641
5641
5641
5641
5641
5641
5641
-
322810
semtim
semtim
semtim
semtim
semtim
semtim
semtim
?
?
?
?
?
?
?
?
?
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
httpd
status
nice 指定程序的运行优先级,加-数字(范围-20~19,默认为 0)
renice 改变一个正在运行的程序优先级不加-
[root@helen ~]# nice -10 /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
[root@helen ~]# ps -le | grep httpd
1 S
0 3044
1 0 85 10 – 5639 -
?
00:00:00 httpd
5 S
48 3046 3044 0 95 10 – 5639 322810 ?
00:00:00 httpd
5 S
48 3047 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3048 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3049 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3050 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3051 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3052 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
5 S
48 3053 3044 0 95 10 – 5639 semtim ?
00:00:00 httpd
[root@helen ~]# pkill httpd
[root@helen ~]# nice –10 /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
nice 和 renice
nice
指定程序的运行优先级
格式:nice -n command
例如:nice -5 myprogram
renice
改变一个正在运行的进程的优先级
格式:renice n pid
例如:renice-5 777
*优先级取值范围为(-20,19)*
[root@helen ~]# nice -12 /etc/rc.d/init.d/httpd start
启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain
name, using 127.0.0.1 for ServerName
[确定]
[root@helen ~]# ps -le | grep httpd
1 S
0 2622
1 5 87 12 – 5639 -
?
00:00:00 httpd
5 S
48 2624 2622 0 97 12 – 5639 322810 ?
00:00:00 httpd
5 S
48 2625 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2626 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2627 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2628 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2629 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2630 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2631 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
[root@helen ~]# renice -30 2622
2622: old priority -14, new priority -20
[root@helen ~]# ps -le | grep httpd
1 S
0 2622
1 0 60 -20 – 5639 -
?
00:00:00 httpd
5 S
48 2624 2622 0 97 12 – 5639 322810 ?
00:00:00 httpd
5 S
48 2625 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2626 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2627 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2628 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2629 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2630 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
5 S
48 2631 2622 0 97 12 – 5639 semtim ?
00:00:00 httpd
nohup
使进程在用户退出登陆后仍旧继续执行,
nohup 命令将执行后的数据信息和错误信息默
认储存到文件 nohup.out 中
格式:
nohup program &
[root@helen ~]# nohup find / -name *x11* > /root/x11.find &
[1] 2687
[root@helen ~]# bg 1
-bash: bg: job has terminated
[1]+ Done
nohup find / -name *x11* > /root/x11.find
进程的挂起和恢复
进程的中止(挂起)和终止
挂起(Ctrl+Z)
终止(Ctrl+C)
进程的恢复
恢复到前台继续运行(fg)
恢复到后台继续运行(bg)
查看挂起及后台执行进程(jobs)
[root@helen ~]# find / -name ?a*
Ctrl+Z
[1]+ Stopped
find
Ctrl+C
[root@helen ~]#
[root@helen ~]# find / -name ?a*
Ctrl+Z
[root@helen ~]# jobs
[2]+ Stopped
find
[root@helen ~]# bg 2
[root@helen ~]# find / -name *x11*
[1] 2773
[root@helen ~]# jobs
[1]+ Done
find
/ -name ?a*
/ -name ?a*
> /root/x11.find &
/ -name *x11* > /root/x11.find
top
作用:进程状态显示和进程控制,每 5 秒钟自动刷新一次(动态显示)
常用选项:
d:指定刷新的时间间隔
c:显示整个命令行而不仅仅显示命令名
u:查看指定用户的进程
k:终止执行中的进程
h or?:获得帮助
r:重新设置进程优先级
s:改变刷新的时间间隔
W:将当前设置写入~/.toprc 文件中
计划任务
计划任务的命令
at 安排作业在某一时刻执行一次
batch 安排作业在系统负载不重时执行一次
cron 安排周期性运行的作业
at 命令的功能和格式
功能:安排一个或多个命令在指定的时间运行一次
at 的命令格式及参数
at[-f 文件名]时间
at -d or atrm 删除队列中的任务
at -l or atq 查看队列中的任务
at 命令指定时间的方式
绝对计时方法
midnight noon teatime
hh:mm [today]
hh:mm tomorrow
hh:mm 星期
hh:mm MMDDYY
相对计时方法
now +n minutes
now +n hours
now +n days
at 命令指定时间的方式
指定在今天下午 17:30 执行某命令(假设现在时间是下午 14:30,2011 年 3 月 2 日)

命令格式如下∶
at 5:30pm
at 17:30
at 17:30 today
at now +3 hours
at now +180 minutes
at 17:30 030211
at 命令使用范例
交互方式
at 9:00
使用命令文件方式
1.生成文件 at.script:
2.使用 at 命令
at -f at.script 9:00 3/2/11
or
at<at.script 9:00 3/2/11
at 配置文件
作用:限制哪些用户可以使用 at 命令
/etc/at.allow
/etc/at.deny
如果/etc/at.allow 文件存在,那么只有列在此文件中的用户才可以使用 at 命令;
若/etc/at.allow 文件不存在,则检查/etc/at.deny 文件是否存在。
若/etc/at.deny 存在,则在此文件中列出的用户都不能使用 at 命令。
如果两个文件都不存在,则只有超级用户可以使用 at 命令。
如果两个文件都存在而且均为空,则所有用户都可以使用 at 命令。
[root@helen ~]# at now +3 minutes
at> ls -l > ls.file
at> date >> file
at> <EOT> (Ctrl+D 保存退出)
job 8 at 2011-02-25 21:30
[root@helen ~]# at now +3 minutes
at> ls -ld >> ls.file
at> pwd >> ls.file
at> <EOT>
(Ctrl+D 保存退出)
job 9 at 2011-02-25 21:31
[root@helen ~]# atq
8
2011-02-25 21:30 a root
9
2011-02-25 21:31 a root
[root@helen ~]# at -l
8
2011-02-25 21:30 a root
9
2011-02-25 21:31 a root
[root@helen ~]# atrm 8
[root@helen ~]# at -l
9
2011-02-25 21:31 a root
[root@helen ~]# at -d 9
[root@helen ~]# at -l
[root@helen ~]# ps -le | grep atd
5 S
0 1928
1 0 85 0 – 467 -
5 S
0 2334
1 0 75 0 – 567 -
[root@helen ~]# pgrep atd
1928
2334
[root@helen ~]# /etc/rc.d/init.d/atd start
?
?
00:00:00 rpc.statd
00:00:00 atd
[root@helen ~]# at 21:45
at> sh /root/Hello
at> <EOT>
job 12 at 2011-02-25 21:45
[root@helen ~]# at -f /root/Hello 21:46 2/25/11
job 13 at 2011-02-25 21:46
[root@helen ~]# at < /root/Hello 21:47 2/25/11
job 14 at 2011-02-25 21:47
[root@helen ~]# cat at.file
Welcome to my home !
2011 年 02 月 25 日 星期五 21:45:00 CST
/root
Welcome to my home !
2011 年 02 月 25 日 星期五 21:46:01 CST
/root
Welcome to my home !
2011 年 02 月 25 日 星期五 21:47:00 CST
/root
batch 命令
作用:
安排一个或多个命令在系统负载较轻时运行一次
(一般情况下负载较轻指平均负载降
到 0.8 以下)

使用方法同 at
[root@helen ~]# batch now +3 minutes
at> echo “welcome” > /root/Hello
at> <EOT>
job 16 at 2011-02-25 21:53
crontab 命令格式
作用:用于生成 cron 进程所需要的 crontab 文件
crontab 的命令格式
crontab{-l|-r|-e}
-l 显示当前的 crontab
-r 删除当前的 crontab
-e 使用编辑器编辑当前的 crontab 文件。
[root@helen ~]# crontab -e
1 0 2 * * 0 /bin/cp -Ru 2>> backup.boot/err
2 0 2 * * 0 cp -Ru /boot /backup
3 0 2 * * 0 touch /boot/testfile
4 45 17 * * 1-5 /usr/bin/wall < /tmp/wall.msg
5 0 18 * * 1-5 /sbin/shutdown -h now
“/tmp/crontab.XXXXf7Q5gb” 5L, 183C written
crontab: installing new crontab
原则:知道的具体时间上填上,不知道的写成*,星期一 0
*/2 每隔一定的时间
*/2 12-14 * 3-6,9-12 1-5 三月到六月和九月到六月的星期一到星期五的 12 日到 14
点每隔 2 分钟执行任务。
crontab 文件格式
minute hour day-of-month month-of-year day-of-week commands
其中
Minute 一小时中的哪一分钟[0~59]
hour 一天中的哪个小时[0~23]
day-of-month 一月中的哪一天[1~31]
month-of-year 一年中的哪一月[1~12]
day-of-week 一周中的哪一天[0~6]
commands 执行的命令
crontab 应用示例
应用范例:
#crontab -e
55 17 * * 1-5 /usr/bin/wall</etc/motd
0 18 * * 1-5 /sbin/init 5
0 0 1,15 * 1 /bin/cp -Ru /etc /backup
* crontab 文件建立好以后可以到/var/spool/cron 目录确认
cron 配置文件
作用:限制哪些用户可以使用 crontab 命令
/etc/cron.allow
/etc/cron.deny
进程处理方式
standalone 独立运行
无论是否有访问请求,一直在运行和监听客户端请求。
1.响应速度快
2.占用资源多
[root@helen ~]# netstat -an | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
State
tcp
0
0 0.0.0.0:838
0.0.0.0:*
LISTEN
tcp 0 52 ::ffff:192.168.9.90:22
::ffff:192.168.9.254:1052 ESTABLISHED
tcp 0 0 ::ffff:192.168.9.90:22
::ffff:192.168.9.254:1053 ESTABLISHED
[root@helen ~]# netstat -an | grep :22
tcp
0
0 :::22
:::*
LISTEN
tcp 0 52 ::ffff:192.168.9.90:22
::ffff:192.168.9.254:1052 ESTABLISHED
tcp 0
0 ::ffff:192.168.9.90:22
::ffff:192.168.9.254:1053 ESTABLISHED
xinetd 进程托管(UNIX xinetd)
xinietd 监听用户请求,传递托管服务,托管服务启动产生进程处理客户端请求
1.响应速度较慢
2.占用资源少
[root@helen ~]# ls /etc/xinetd.d(托管服务存放目录,每个服务对应一个配置文件)
chargen-dgram daytime-stream echo-dgram ekrb5-telnet krb5-telnet tcpmux-server
chargen-stream discard-dgram echo-stream gssftp
kshell
time-dgram
daytime-dgram discard-stream eklogin
klogin
rsync
time-stream
[root@helen ~]# cat /etc/xinetd.d/klogin
# default: off
# description: The kerberized rlogin server accepts BSD-style rlogin sessions, \
#
but uses Kerberos 5 authentication.
service klogin
{
flags
= REUSE
socket_type
= stream
wait
= no
user
= root
server
= /usr/kerberos/sbin/klogind
server_args
= -5
disable
= yes
}
service 服务名称
disable=yes/no 设定是否不启用服务,yes 不启用,no 启用
server=服务启动脚本的绝对路径
User=管理用户
服务类型 Server Type
1.访问量很大,webserver:standalone
2.公司内部 ftp 服务:xinetd
atd、crond 计划任务
每一分钟从休眠中醒来一次检测计划任务,这是为什么计划任务没有精确到秒的原因
[root@helen ~]# ps -le | grep xinetd
1 S
0 2226
1 0 83 0 – 682 -
?
00:00:00 xinetd
[root@helen ~]# kill -1 2226(修改设置,重启 xinetd 进程)
[root@helen ~]#
[root@helen ~]# ls /var/spool/cron at 任务存放目录
root
[root@helen ~]# ls /var/spool/at
at 任务存放目录
a0000a014a459c a0000b014a459c spool
[root@helen ~]# ps -le | grep crond
1 S
0 2284
1 0 78 0 – 1539 -
?
00:00:00 crond
[root@helen ~]# /etc/rc.d/init.d/crond start
启动 crond:cardmgr 已经在运行[失败]
[root@helen ~]# crontab -l 列出所有的周期性计划任务
0 2 * * 0 /bin/cp -Ru 2>> backup.boot/err
0 2 * * 0 cp -Ru /boot /backup
0 2 * * 0 touch /boot/testfile
45 17 * * 1-5 /usr/bin/wall < /tmp/wall.msg
0 18 * * 1-5 /sbin/shutdown -h now
[root@helen ~]# crontab -r 删除所有计划任务
[root@helen ~]# crontab -l
no crontab for root
[root@helen ~]# /etc/cron.<TAB><TAB>
cron.d/
cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/
[root@helen ~]# ls /etc/cron.d
sa-update
[root@helen ~]# ls /etc/cron.daily/ 每天执行的脚本
00webalizer 0logwatch cups
logrotate
mlocate.cron rpm
0anacron
certwatch
inn-cron-expire
makewhatis.cron
prelink
tmpwatch
[root@helen ~]# ls /etc/cron.hourly/ 每小时执行的脚本
inn-cron-nntpsend inn-cron-rnews
[root@helen ~]# ls /etc/cron.weekly 每周执行的脚本
0anacron 99-raid-check makewhatis.cron
[root@helen ~]# vi /etc/crontab
1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4
5
6
7
8
9
10
HOME=/
# run-parts
01 * * * * root
02 4 * * * root
22 4 * * 0 root
42 4 1 * * root
run-parts
run-parts
run-parts
run-parts
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly