1. Linux中的信号机制
1.1 产生信号:
1.1.1 键盘组合键
终止进程:SIGINT Ctrl+c
暂停进程:SIGSTP Ctrl+z
1.1.2 常用命令
kill: 杀死指定进程PID的进程
killall: 杀死指定进程名的进程
1.2 程序中的信号处理
1.2.1 按照默认方式处理信号
1.2.2 忽略信号
1.2.3 按照自定义方式捕捉并处理信号
1.3 捕捉信号-trap命令,e.g.
1.3.1 捕捉退出信号
#!/bin/sh
trap "echo ‘trap worked’" EXIT
count=1
while [ $count -le 3 ]
do
echo "Loop of $count"
sleep 1
count=$[ $count+1 ]
done
echo "Loop Ended"
运行结果:
1.3.2 移除捕获, trap - 信号
#!/bin/sh
trap "echo ‘trap worked’" EXIT
count=1
while [ $count -le 3 ]
do
echo "Loop of $count"
sleep 1
count=$[ $count+1 ]
done
echo "Loop Ended"
#移除捕获
trap - EXIT
echo "trap deleted"
运行结果:
2. 后台运行脚本
2.1 后台运行进程,即不运行在中断显示器上的进程
2.2 后台运行进程的命令格式:script& , e.g.
2.3 通过jobs命令,可查看运行中的作业,e.g.
2.4 通过bg,fg重启暂停的作业,bg为以后台的形式重启作业,fg为以前台的形式重启作业,e.g:
2.5 作业优先级
2.5.1 优先级范围:-20(高) -19(低)
2.5.2 优先级设定:nice
2.5.3 优先级重设:renice
2.6 脱离控制台限制- nohup Script&, 运行中关掉控制台,依旧能继续运行,并将运行结果输出到nohup.out文件中。
2.6.1 脚本内容:
#!/bin/sh
count=1
while [ $count -le 15 ]
do
echo "Loop of $count"
sleep 3
count=$[ $count+1 ]
done
echo "Loop Ended"
2.6.2 运行结果:
3. 定时运行脚本
3.1 指定时间运行,命令格式:at [-f filename] time, 时间的格式可以是:10:15, 10:15~PM, now, noon, midnight, teatime, MMDDYY, MM.DD.YY, MM/DD/YY, Dec 25, now+1min等
3.2 简单示例,e.g.指定具体时间进行运行脚本:
#!/bin/sh
exec 1>testresult
echo "scritp ran at `date`"
(备注:mac上面执行at命令有点问题,可以正常执行at命令,但是无法定时执行脚本,暂未找到原因)
3.3 通过crontab和anacrontab命令,进行周期性执行相关命令,详细内容可参考:点击打开链接
4. 启动时运行脚本
4.1 自定义开机运行脚本, 将需要运行的脚本命令,添加到rc.local文件里面即可,不同系统rc.local存放的路径不同:
debian: /etc/init.d/rc.local
Ubuntu: /etc/rc.local
CentOS: /etc/rc.d/rc.local
4.2 Shell启动时运行脚本, 将需要运行的脚本配置到对应的配置文件中;不同方式,读取的配置文件不同:
启动bash: /etc/profile /etc/.bashrc
通过ssh登陆: /etc/profile /etc/.bashrc
通过ssh执行命令: /etc/.bashrc