trap

  • 设置:在接收到信号后将要执行的命令
trap command signal    # signal = HUP / INT / QUIT / ABRT / ALARM / TERM / ...
trap '命令' 信号列表       # 捕获信号时执行指定命令
trap 信号                 # 恢复该信号的默认处理
trap '' 信号              # 忽略该信号(注意是两个单引号,中间无空格)
trap -p                   # 查看当前已设置的 trap
  • 示例
#!/bin/sh
trap 'rm -f /tmp/my_tmp_file_$$ ' INT            # 设置:收到中断 INT 后,删除临时文件,
                                                 # $$ 处会被自动填充当前脚本的 PID
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$                       # “日期”写入临时文件
echo "press interrupt (CTRL -C) to interrupt ..."
while [ -f /tmp/my_tmp_file_$$ ]; do             # 循环,反复查询,临时文件是否存在
echo File exists
sleep 1                                          # 阻塞 1秒
done
echo The file no longer exists                   # INT删除临时文件后,循环结束,打印提示

trap INT                                         # 复原 INT 信号回到默认功能(不再是删除临时文件) 
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "press interrupt (control -C) to interrupt ..."
while [ -f /tmp/my_tmp_file_$$ ]; do
echo File exists
sleep 1
done
echo we never get here                           # 这句不会出现了,因为INT不会删除临时文件
exit 0
posted on 2026-02-02 09:28  中年二班  阅读(0)  评论(0)    收藏  举报