Signals and Traps

When writing shell scripts, and you’re creating tmp files or doing anything that needs to or should be cleaned up either after the script is finished or in the event of an error, you should include a “cleanup” function and possibly an “error” function that first calls the “cleanup” function and presents an error code or message.

The main way of doing this is by the trap function/command. Basically, it “traps” any exit codes/commands/signals presented by the script, by the user or by the system.

Below is the various signal names or number codes you should include in your trap line.

Trap Signals
Name Default Action Description

“1 “, “SIGHUP”, “terminate process”, “terminal line hangup” “2 “, “SIGINT”, “terminate process”, “interrupt program” “3 “, “SIGQUIT”, “create core image”, “quit program” “4 “, “SIGILL”, “create core image”, “illegal instruction” “5 “, “SIGTRAP”, “create core image”, “trace trap” “6 “, “SIGABRT”, “create core image”, “abort program (formerly SIGIOT)” “7 “, “SIGEMT”, “create core image”, “emulate instruction executed” “8 “, “SIGFPE”, “create core image”, “floating-point exception” “9 “, “SIGKILL”, “terminate process”, “kill program” “10”, “SIGBUS”, “create core image”, “bus error” “11”, “SIGSEGV”, “create core image”, “segmentation violation” “12”, “SIGSYS”, “create core image”, “non-existent system call invoked” “13”, “SIGPIPE”, “terminate process”, “write on a pipe with no reader” “14”, “SIGALRM”, “terminate process”, “real-time timer expired” “15”, “SIGTERM”, “terminate process”, “software termination signal” “16”, “SIGURG”, “discard signal”, “urgent condition present on socket” “17”, “SIGSTOP”, “stop process”, “stop (cannot be caught or ignored)” “18”, “SIGTSTP”, “stop process”, “stop signal generated from keyboard” “19”, “SIGCONT”, “discard signal”, “continue after stop” “20”, “SIGCHLD”, “discard signal”, “child status has changed” “21”, “SIGTTIN”, “stop process”, “background read attempted from control terminal” “22”, “SIGTTOU”, “stop process”, “background write attempted to control terminal” “23”, “SIGIO”, “discard signal”, “I/O is possible on a descriptor (see fcntl(2))” “24”, “SIGXCPU”, “terminate process”, “cpu time limit exceeded (see setrlimit(2))” “25”, “SIGXFSZ”, “terminate process”, “file size limit exceeded (see” setrlimit(2)) “26”, “SIGVTALRM”, “terminate process”, “virtual time alarm (see setitimer(2))” “27”, “SIGPROF”, “terminate process”, “profiling timer alarm (see setitimer(2))” “28”, “SIGWINCH”, “discard signal”, “Window size change” “29”, “SIGINFO”, “discard signal”, “status request from keyboard” “30”, “SIGUSR1”, “terminate process”, “User defined signal 1” “31”, “SIGUSR2”, “terminate process”, “User defined signal 2”