Xử lý khi có tín hiệu kết thúc ứng dụng

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 
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

trap "echo Booh!" SIGINT SIGTERM
echo "pid is $$"
while :      # This is the same as "while true".
   sleep 60  # This script is not really doing anything.

2. Script sau đây dọn dẹp file lock khi kết thúc

# Previous makewhatis should execute successfully:
[ -f $LOCKFILE ] && exit 0
# Upon exit, remove lockfile.
trap "{ rm -f $LOCKFILE ; exit 255; }" EXIT
makewhatis -u -w
exit 0

Leave a Comment

Filed under Software

Leave a Reply

Your email address will not be published. Required fields are marked *