Chinaunix
标题:
shell 编程中的信号处理(signal handling in shell programming
[打印本页]
作者:
valentine
时间:
2002-03-17 20:54
标题:
shell 编程中的信号处理(signal handling in shell programming
[这个贴子最后由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
作者:
feeling
时间:
2002-03-17 21:32
标题:
shell 编程中的信号处理(signal handling in shell programming
[/home/guest]kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT
SIGFPE
9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 1
SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 27) SIGMSG 2
SIGWINCH 29) SIGPWR
30) SIGUSR1 31) SIGUSR2 32) SIGPROF 33) SIGDANGER
34) SIGVTALRM 35) SIGMIGRATE 36) SIGPRE 37) SIGVIRT
3
SIGALRM1 39) SIGWAITING 60) SIGKAP 61) SIGRETRACT
62) SIGSOUND 63) SIGSAK
作者:
valentine
时间:
2002-03-17 23:07
标题:
shell 编程中的信号处理(signal handling in shell programming
不同的系统不一样,先前是sco5.0.5上的结果,
下面是HP-UX的结果,
1) HUP 16) USR1 31) RESERVED
2) INT 17) USR2 32) DIL
3) QUIT 1
CHLD 33) XCPU
4) ILL 19) PWR 34) XFSZ
5) TRAP 20) VTALRM 35) bad trap
6) IOT 21) PROF 36) bad trap
7) EMT 22) POLL 37) RTMIN
FPE 23) WINCH 3
RTMIN+1
9) KILL 24) STOP 39) RTMIN+2
10) BUS 25) TSTP 40) RTMIN+3
11) SEGV 26) CONT 41) RTMAX-3
12) SYS 27) TTIN 42) RTMAX-2
13) PIPE 2
TTOU 43) RTMAX-1
14) ALRM 29) URG 44) RTMAX
15) TERM 30) LOST
下面是cygbin下的结果:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT
SIGFPE
9) SIGKILL10) SIGBUS11) SIGSEGV12) SIGSYS
13) SIGPIPE14) SIGALRM15) SIGTERM16) SIGURG
17) SIGSTOP1
SIGTSTP19) SIGCONT20) SIGCHLD
21) SIGTTIN22) SIGTTOU23) SIGIO24) SIGXCPU
25) SIGXFSZ26) SIGVTALRM27) SIGPROF2
SIGWINCH
29) SIGLOST30) SIGUSR131) SIGUSR2
大同小异。
作者:
hestia
时间:
2002-03-18 14:49
标题:
shell 编程中的信号处理(signal handling in shell programming
受益匪浅
作者:
amiao
时间:
2002-03-18 15:24
标题:
shell 编程中的信号处理(signal handling in shell programming
just learn it!admire u.
作者:
sopato
时间:
2002-03-20 09:53
标题:
shell 编程中的信号处理(signal handling in shell programming
高级应用啊!!!
valentine , I 服了 YOU !!
作者:
txlinux
时间:
2002-03-20 10:44
标题:
shell 编程中的信号处理(signal handling in shell programming
It is really advanced skill.
作者:
valentine
时间:
2002-03-20 15:58
标题:
shell 编程中的信号处理(signal handling in shell programming
大家喜欢便好。
也希望大家把自己的经验点滴写出来交流,让我们一切进步。
一天不学习,比不上刘少奇嘛。哈哈。
作者:
fanyan1999
时间:
2002-03-28 22:19
标题:
shell 编程中的信号处理(signal handling in shell programming
高呀。请教一个问题。
我做了这样一个SHELL:
trap "echo """ 2 3 4
echo "enter date"
reaed fdate
flen=`echo $fdate|awi '{print $0}'`
if [ $flen -ne 8 ]
:
:
这个SHELL 在某些机器上运行到 IF 语句时出错,提示:TEST 。。。
如果把TRAP语句屏蔽掉则可以在所有机器上正常运行。
这是怎么回事???
作者:
valentine
时间:
2002-03-29 09:17
标题:
shell 编程中的信号处理(signal handling in shell programming
To fanyan1999 :
你的if 语句在用户输入为空是一般会出错的,应该在此以前有如此形式的判断
[ "X"$flen = "X" ] && echo "no input" && exit
你的trap语句是不是可以多换的形式试一试。
如:
trap “echo ‘’” 2 3 4
说明一下你用的系统和详细错误信息。
作者:
littletiger
时间:
2002-09-09 10:30
标题:
shell 编程中的信号处理(signal handling in shell programming
好东东
作者:
ghostinwind
时间:
2002-09-11 10:52
提示:
作者被禁止或删除 内容自动屏蔽
作者:
涛涛
时间:
2002-09-14 23:55
标题:
shell 编程中的信号处理(signal handling in shell programming
斑竹说了我正想问的问题!
作者:
btq
时间:
2002-09-15 20:19
标题:
shell 编程中的信号处理(signal handling in shell programming
太好了
作者:
feeling
时间:
2002-10-19 12:00
标题:
shell 编程中的信号处理(signal handling in shell programming
>> trap "echo logout" 0
>> 这是什么意思?
用户退出时执行 echo logout ,就是说用户退出时会看到 logout 的提示信息
作者:
lllll
时间:
2002-12-05 11:56
标题:
shell 编程中的信号处理(signal handling in shell programming
trap可以屏蔽信号2,15等,
但屏蔽信号9好像不行。
谁能教教我怎么屏蔽信号9。
谢了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2