使用trap捕获信号,发现脚本内循环体中的sleep语句被跳过

sh/bash/dash/ksh/zsh等Shell脚本
回复
startfly
帖子: 3
注册时间: 2011-04-03 9:42

使用trap捕获信号,发现脚本内循环体中的sleep语句被跳过

#1

帖子 startfly » 2011-04-14 13:16

截屏如下:
wyf@wyf-laptop:~/lab/wyf28$ cat test16
#!/bin/bash

trap "echo Haha" SIGINT SIGTERM
echo This is a test program
count=1
while [ $count -le 5 ]
do
echo Loop \#$count
sleep 5
count=$[$count+1]
done
echo This is the end of the test program

wyf@wyf-laptop:~/lab/wyf28$ ./test16
This is a test program
Loop #1
Loop #2
Loop #3
Loop #4
Loop #5
This is the end of the test program
wyf@wyf-laptop:~/lab/wyf28$ ./test16
This is a test program
Loop #1
^CHaha
Loop #2
^CHaha
Loop #3
^CHaha
Loop #4
^CHaha
Loop #5
^CHaha
This is the end of the test program
wyf@wyf-laptop:~/lab/wyf28$

在脚本里使用trap捕获SIGINT 和 SIGTERM 信号

第一次运行脚本时,没有使用Ctrl+C,屏幕上打出Loop #1、Loop #2、Loop #3、Loop #4、Loop #5间隔是5秒,
但在第二次运行脚本时,连续使用Ctrl+C,在屏幕上输出Haha后立即打印出接下来的Loop...没有时间间隔了。
这是什么原因呢?
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 使用trap捕获信号,发现脚本内循环体中的sleep语句被跳过

#2

帖子 aerofox » 2011-04-15 21:43

因为你按Ctrl+C终端了。
while 循环中最费时间的是哪条语句?是不是 sleep 5 呀?所以你按 Ctrl+C 时,最大的概率是正在执行 sleep 5 这条命令,你把它终止了。
回复