1.处理信号
信号 值 描述
1 SIGHUP 挂起进程
2 SIGINT 终止进程
3 SIGQUIT 停止进程
9 SIGKILL 无条件终止进程
15 SIGTERM 可能的话终止进程
17 SIGSTOP 无条件停止进程,但不是终止进程
18 SIGTSTP 停止或暂停进程,但不终止进程
19 SIGCONT 继续运行停止的进程
bash shell默认会忽略任何3和15的信号,但会处理收到的1和2信号
2.产生信号
1)终止进程
Ctrl+C会产生信号2终止进程
2)暂停进程
Ctrl+Z会产生信号18停止进程
# sleep 100
[1]+ Stopped sleep 100
# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 25186 0.0 0.0 3680 468 pts/1 T 04:16 0:00 sleep 100
root 25240 0.0 0.0 4216 940 pts/1 R+ 04:19 0:00 ps au
root 26781 0.0 0.1 4620 1424 pts/2 Ss+ Nov09 0:00 bash
shell中运行的每个进程称为作业,已停止的作业状态为T
3.捕捉信号
1)捕捉信号
#!/bin/bash
trap "echo 'I have trapped Ctrl+C'" SIGINT SIGTERM trap后为""空则不显示信息,脚本不会被Ctrl+C终止
count=1
while [ $count -le 10 ]
do
echo "loop #$count"
sleep 2
count=$[ $count + 1 ]
done
# ./trap
loop #1
loop #2
loop #3
loop #4
I have trapped Ctrl+C
loop #5
2)捕捉脚本退出时的信号
#!/bin/bash
trap "echo 'goodbye'" EXIT 捕捉EXIT信号
3)移除捕捉
#!/bin/bash
trap "echo 'goodbye'" EXIT
count=1
while [ $count -le 2 ]
do
echo "loop #$count"
sleep 2
count=$[ $count + 1 ]
done
trap - EXIT trap后加-号移除信号捕捉
4.后台运行脚本
# ./trap & 加&符号后台运行,进程会话退出,后台进程也会退出
[5] 30618 方括号内为作业号,之后为PID
# nohup ./trap & 加nohup命令,即使退出终端,脚本也不会终止
[5] 30725
# nohup: appending output to `nohup.out' 脚本结束后生成nohup.out文件,包含标准输出信息
5.作业控制
1)查看作业
# jobs -l选项显示PID及作业号
[1] Stopped sleep 100 (wd: ~)
[2] Stopped ./trap
[3]- Stopped ./trap vi trap 带-号为下一个默认作业
[4]+ Stopped ./trap 带+号会被当作默认作业
2)重启停止的作业
# bg 2 后台模式重启一个作业,作业号为2
# fg 2 前台模式重启一个作业
6.调整谦让度
默认情况下,Shell启动的所有进程拥有相同的高度优先级
优先级从-20(最高优先级)到20(最低优先级)
1)nice
# nice -n 10 ./trap > out.txt & nice命令在启动时调整优先级,普通用户只能降低优先级
2) renice
# ps al
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 22854 22850 15 0 4620 1452 wait Ss pts/1 0:00 -bash
0 0 26781 26770 16 0 4620 1424 - Ss+ pts/2 0:00 bash
0 0 30927 22854 15 0 4440 1040 finish T pts/1 0:00 /bin/bash ./trap
# renice 10 -p 26781
renice只能对属于自己的进程执行renice,只能降低进程的优先级,root用户可以调整任何优先级
7.定时任务
1)cron时间表
min hour dayofmonth month dayofweek command
2)查看cron表
$ crontab -l
$ crontab -e 清加条目
3)cron目录
/etc目录下cron目录,脚本放于这些目录下就可定时执行
cron.hourly
cron.daily
cron.weekly
cron.monthly
cron表中的作业当系统关机后,期间的作业再启动系统后不会运行
4)anacron程序
系统关机了,当再次启动后,anacron程序会尽快运行错过的计划好的作业
anacron程序只处理cron目录中的程序,但不会处理/etc/cron.hourly的脚本
anacron格式:period delay identifier command
period定义多久运行一次,单位天
delay定义系统启动后多少分钟后开始运行错过的脚本
$ cat anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
8.开机自启动
开机读取/etc/inittab文件
开机脚本一般放于/etc/rc#.d目录,其中#为运行级别
或者/etc/init.d目录
本地开机文件
Ubuntu /etc/rc.local
debian /etc/init.d/rc.local
Fedora /etc/rc.d/rc.local
为系统中的每个用户运行一个脚本:/etc/bashrc
inittab程序:格式 label:runlevel:action:process
1)label
id 定义缺省init程序运行级别
ca 按下“Ctrl+Alt+Delete”时运行的进程
si 指定系统初始化进程
pf UPS监控软件通知电源被切断时运行的进程
pr 真正关闭系统前,UPS发出电源恢复信号时运行的进程
2)runlevel 运行级别,可不指定
3)action
wait init程序运行此程序一次,并等待运行结束才进入下一步
ctrlaltdel 按下“Ctrl+Alt+Delete”时运行Process字段指定的值
respawn 保证一直处于运行状态的进程,若进程终止,则重启进程
4)process 运行的命令
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization. 运行rc.sysinit进行系统初始化
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE 按下“Ctrl+Alt+Delete”时关机
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it. 取消关机
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels 始终打开6个终端控制台
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
信号 值 描述
1 SIGHUP 挂起进程
2 SIGINT 终止进程
3 SIGQUIT 停止进程
9 SIGKILL 无条件终止进程
15 SIGTERM 可能的话终止进程
17 SIGSTOP 无条件停止进程,但不是终止进程
18 SIGTSTP 停止或暂停进程,但不终止进程
19 SIGCONT 继续运行停止的进程
bash shell默认会忽略任何3和15的信号,但会处理收到的1和2信号
2.产生信号
1)终止进程
Ctrl+C会产生信号2终止进程
2)暂停进程
Ctrl+Z会产生信号18停止进程
# sleep 100
[1]+ Stopped sleep 100
# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 25186 0.0 0.0 3680 468 pts/1 T 04:16 0:00 sleep 100
root 25240 0.0 0.0 4216 940 pts/1 R+ 04:19 0:00 ps au
root 26781 0.0 0.1 4620 1424 pts/2 Ss+ Nov09 0:00 bash
shell中运行的每个进程称为作业,已停止的作业状态为T
3.捕捉信号
1)捕捉信号
#!/bin/bash
trap "echo 'I have trapped Ctrl+C'" SIGINT SIGTERM trap后为""空则不显示信息,脚本不会被Ctrl+C终止
count=1
while [ $count -le 10 ]
do
echo "loop #$count"
sleep 2
count=$[ $count + 1 ]
done
# ./trap
loop #1
loop #2
loop #3
loop #4
I have trapped Ctrl+C
loop #5
2)捕捉脚本退出时的信号
#!/bin/bash
trap "echo 'goodbye'" EXIT 捕捉EXIT信号
3)移除捕捉
#!/bin/bash
trap "echo 'goodbye'" EXIT
count=1
while [ $count -le 2 ]
do
echo "loop #$count"
sleep 2
count=$[ $count + 1 ]
done
trap - EXIT trap后加-号移除信号捕捉
4.后台运行脚本
# ./trap & 加&符号后台运行,进程会话退出,后台进程也会退出
[5] 30618 方括号内为作业号,之后为PID
# nohup ./trap & 加nohup命令,即使退出终端,脚本也不会终止
[5] 30725
# nohup: appending output to `nohup.out' 脚本结束后生成nohup.out文件,包含标准输出信息
5.作业控制
1)查看作业
# jobs -l选项显示PID及作业号
[1] Stopped sleep 100 (wd: ~)
[2] Stopped ./trap
[3]- Stopped ./trap vi trap 带-号为下一个默认作业
[4]+ Stopped ./trap 带+号会被当作默认作业
2)重启停止的作业
# bg 2 后台模式重启一个作业,作业号为2
# fg 2 前台模式重启一个作业
6.调整谦让度
默认情况下,Shell启动的所有进程拥有相同的高度优先级
优先级从-20(最高优先级)到20(最低优先级)
1)nice
# nice -n 10 ./trap > out.txt & nice命令在启动时调整优先级,普通用户只能降低优先级
2) renice
# ps al
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 22854 22850 15 0 4620 1452 wait Ss pts/1 0:00 -bash
0 0 26781 26770 16 0 4620 1424 - Ss+ pts/2 0:00 bash
0 0 30927 22854 15 0 4440 1040 finish T pts/1 0:00 /bin/bash ./trap
# renice 10 -p 26781
renice只能对属于自己的进程执行renice,只能降低进程的优先级,root用户可以调整任何优先级
7.定时任务
1)cron时间表
min hour dayofmonth month dayofweek command
2)查看cron表
$ crontab -l
$ crontab -e 清加条目
3)cron目录
/etc目录下cron目录,脚本放于这些目录下就可定时执行
cron.hourly
cron.daily
cron.weekly
cron.monthly
cron表中的作业当系统关机后,期间的作业再启动系统后不会运行
4)anacron程序
系统关机了,当再次启动后,anacron程序会尽快运行错过的计划好的作业
anacron程序只处理cron目录中的程序,但不会处理/etc/cron.hourly的脚本
anacron格式:period delay identifier command
period定义多久运行一次,单位天
delay定义系统启动后多少分钟后开始运行错过的脚本
$ cat anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
8.开机自启动
开机读取/etc/inittab文件
开机脚本一般放于/etc/rc#.d目录,其中#为运行级别
或者/etc/init.d目录
本地开机文件
Ubuntu /etc/rc.local
debian /etc/init.d/rc.local
Fedora /etc/rc.d/rc.local
为系统中的每个用户运行一个脚本:/etc/bashrc
inittab程序:格式 label:runlevel:action:process
1)label
id 定义缺省init程序运行级别
ca 按下“Ctrl+Alt+Delete”时运行的进程
si 指定系统初始化进程
pf UPS监控软件通知电源被切断时运行的进程
pr 真正关闭系统前,UPS发出电源恢复信号时运行的进程
2)runlevel 运行级别,可不指定
3)action
wait init程序运行此程序一次,并等待运行结束才进入下一步
ctrlaltdel 按下“Ctrl+Alt+Delete”时运行Process字段指定的值
respawn 保证一直处于运行状态的进程,若进程终止,则重启进程
4)process 运行的命令
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization. 运行rc.sysinit进行系统初始化
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE 按下“Ctrl+Alt+Delete”时关机
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it. 取消关机
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels 始终打开6个终端控制台
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon