- 论坛徽章:
- 0
|
[这个贴子最后由valentine在 2002/03/17 08:57pm 编辑]
在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份,我们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用到了信号处理。
# kill -l
可以列出系统的信号名称,如下:
HUP INT QUIT[BR]ILL TRAP ABRT[BR]EMT FPE KILL[BR]BUS SEGV SYS[BR]PIPE ALRM TERM[BR]USR1 USR2 CHLD[BR]PWR WINCH URG[BR]POLL STOP TSTP[BR]CONT TTIN TTOU[BR]VTALRM PROF XCPU[BR]XFSZ[BR]
共31个,在很多情况下,信号可以用序号也可以用名称表示。
通常我们需要忽略的信号有四个,即:HUP INT QUIT,TSTP,也就是信号1,2,3,24
使用这样的语句可以使这些中断信号被忽略:
trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP
用 trap :1 2 3 24 or trap HUP INT QUIT TSTP使其回复默认值。
用stty -a可以列出中断信号与键盘的对应,分别执行上面的命令后,运行tail -f /etc/passwd 然后尝试用键盘中断,试试两种情况(默认和忽略)下有何不同。
更方便的是我们可以用在shell中用trap定义我们自己的信号处理程序,就象在c中用signal一样,
如:trap “echo 'GO Away‘” INT
或
cleanup()
{
echo[/FONT] " catching signal..."
rm /tmp/tmpfile
exit
}
...
trap clearnup INT TERM
...
这样使我们的程序在退出时可以清理一些临时文件。
command list:
stty kill trap |
|