Hàm trap giúp đặt bẫy tín hiệu kết thúc của ứng dụng, khi nhận được tín hiệu này ứng dụng có thể tiến hành công việc như dọn dẹp…
Các tín hiệu kết thúc liệt kê trong bảng sau, có thể dùng giá trị hằng chuỗi hay giá trị số
Signal Value Action Comment ---------------------------------------------------------- SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no readers SIGALRM 14 Term Timer signal from alarm(2) SIGTERM 15 Term Termination signal SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2 SIGCHLD 20,17,18 Ign Child stopped or terminated SIGCONT 19,18,25 Continue if stopped SIGSTOP 17,19,23 Stop Stop process SIGTSTP 18,20,24 Stop Stop typed at tty SIGTTIN 21,21,26 Stop tty input for background process SIGTTOU 22,22,27 Stop tty output for background process
Thí dụ
1. Script sau đây in dòng Booh! khi nhận tín hiệu Ctrl + C (SIGINT hay 2, SIGTERM hay 15). Vì không bẫy SIGKILL nên nó không in dòng Booh! khi kết thúc bằng lệnh kill
#!/bin/bash
trap "echo Booh!" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
2. Script sau đây dọn dẹp file lock khi kết thúc
#!/bin/bash
LOCKFILE=/var/lock/makewhatis.lock
# Previous makewhatis should execute successfully:
[ -f $LOCKFILE ] && exit 0
# Upon exit, remove lockfile.
trap "{ rm -f $LOCKFILE ; exit 255; }" EXIT
touch $LOCKFILE
makewhatis -u -w
exit 0