LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1203|回复: 6

标题: 请教有关INT与trap的问题

[复制链接]
发表于 2008-3-11 15:20:47 | 显示全部楼层 |阅读模式
我在看beginning linux programmingk( linux程序设计第三版)
书中第二章 shell编程 有一个代码,执行出错。
执行结果如下:
把代码中“trap INT”改为“trap 2”即可以执行,请教这是为什么?
还有,echo creating file /tmp/my_tmp_file_$$中,$$是怎么生成的?为什么生成?请指教。
代码如下:


###########执行结果#############
# ./_trap
creating file /tmp/my_tmp_file_7456
Press interrupt (Ctrl-C) to interrupt....
File exists
File exists
The file no longer exists
trap: usage: trap [-lp] [arg signal_spec ...]
##############################


##############代码如下,红色的为修改的地方###############
#!/bin/sh

trap 'rm -f /tmp/my_tmp_file_$$' INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$

echo "ress interrupt (Ctrl-C) to interrupt...."
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done
echo The file no longer exists

[color="Red"]trap INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$

echo "ress interrupt (Ctrl-C) to interrupt...."
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done

echo We never get here

exit 0



##########################
发表于 2008-3-11 20:02:44 | 显示全部楼层
应该是INT无法识别的问题吧,trap 要么是数字(对应的linux系统可以识别的信号量).或者用对应的符号,SIGINT等等,,
回复 支持 反对

使用道具 举报

发表于 2008-3-11 20:03:29 | 显示全部楼层
$$是当前进程的id,系统的环境变量之一.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 09:23:36 | 显示全部楼层
谢谢,不过脚本中上面已经有一句了:

[color="Red"]trap 'rm -f /tmp/my_tmp_file_$$' INT

这句是可以执行的。单独在命令行中输入
trap INT
并没有报错
我用的FC6
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 09:27:28 | 显示全部楼层
书上说:INT代表中断请求,与数字2相同
回复 支持 反对

使用道具 举报

发表于 2008-3-12 23:16:11 | 显示全部楼层
这个是我截的,你看看吧,标准就是SIGINT。
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
你说的INT也是可以用的。不过当你用trap INT为什么会出错。。这个我也不太了解了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 09:47:35 | 显示全部楼层
谢谢,使用SIGINT依然是出现同样问题,不明白呀。。。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表