处理信号
- Ctrl+C组合键会产生SIGINT信号,会停止shell中当前运行的进程
- Crtl+Z组建键会产生SIGTSTP信号,停止shell中运行的任何进程,停止进程会让程序继续保留在内存中,并能从上一次停止的位置继续运行
- trap命令允许你来指定shell脚本要观察哪些Linux信号并从shell中拦截。如果脚本收到了trap命令中列出的信号,它会阻止它被shell处理,而在本地处理它
trap "echo 'Sorry, I have trapped Ctrl+C' " SIGINT SIGTERM #捕捉信号后echo一段字>符串
echo This is a test program
count=1
while (( $count <= 10 ))
do
echo "Times: $count";
count=$[ $count + 1 ];
sleep 5;
done
echo "Done";
- trap可以捕捉脚本的退出
trap "echo 'Goodbye' EXIT; #捕捉脚本的退出
后台模式运行脚本
- 在命令后面加个&符号,就可以在后台运行脚本
./test.sh &
非控制台下运行脚本
- 有时你会想在终端会话中启动shell脚本,然后让脚本一直以后台模式运行,直到其完成,即使你退出了终端会话。可以使用nohup命令来实现。
nohup ./test.sh &
作业控制
- jobs命令允许你查看shell当前正在处理的作业。jobs列出的作业中,带加号的作业会被当作默认的作业,带减号的作业则会在当前默认作业完成处理的情况下成为下一个默认作业。任何时候都只有一个带加号的作业和带减号的作业。
- 暂停的命令可以用bg命令加作业号,以后台模式重启,
bg 2
,使用fg以前台模式重新fg 2
调整优先级
- 调度优先级是个整数值,从-20(最高优先级)到+19(最低优先级)。默认情况下,bash shell会以0优先级启动所有进程
- nice命令允许你在启动时调整一个命令的调度优先级
nice -n 10 ./test.sh
定时运行作业
- at命令允许指定Linux系统何时运行脚本
- atrm命令来删除等待中的作业
- cron程序来计划要定期执行的作业
- anacron程序可以解决cron程序无法运行Linux因关机而错过的任务
启动时运行
Linux开机过程
- 开始运行Linux系统时,Linux内核加载到内存中并运行。它做的第一件事是开始UNIX System V init过程或Upstart init过程,具体取决于版本。
- System V init过程会读取/etc/inittab文件。 inittab文件会列出系统的运行级。不同的Linux运行级会启动不同的程序和脚本。
大多数Linux发行版提供了一个本地开机文件专门让系统管理员添加开始时运行的脚本,具体视版本而定。如Ubuntu,有/etc/rc.local
- 还可以在 (1) .bash_profile 文件中添加脚本,此文件会在新shell是新的登录时运行(2) .bashrc 当新shell启动时,包括有新的登录,此文件会运行(3)如果想为系统的所有用户运行一个脚本,可以在 /etc/bashrc 文件中添加。