We’re going to focus on four signals:
| Signal | Name | Effect |
|---|---|---|
| 1 | SIGHUP | Reload configuration (hack!) |
| 2 | SIGINT | Terminate process, allow for cleanup |
| 9 | SIGKILL | Terminate immediately - no cleanup |
| 15 | SIGTERM | Terminate process, allow for cleanup |
The manual (man signal) contains a
longer list.
| Signal | 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 |
ps |
Show some running processes |
ps aux |
Show lots of running processes |
ps and ps aux pair great with fuzzy-finders — such as
grep and fzf. To find a running process interactively, try ps | fzf or ps aux | fzf.
But what can we do with a process? Well, we can kill it. And … I must reluctantly admit I don’t know anything else we can do with it.
First, we need something to kill. ☠️
# Leave this running in a terminal
sleep 9999To kill a process, we can use kill or
pkill. Kill requires a process ID
(number).
# Find the process ID with `ps` and `grep`
ps | grep sleep33312 ttys003 0:00.00 sleep 9999999
33312 is our ID.
# Now kill it!
kill 33312With pkill, we can give a
pattern - or just the full process name.
# Start a long running process in another terminal
sleep 9999999# Then kill it off.
pkill sleepkill and pkill accept a first argument as signal code. To
kill with SIGINT, use kill -2 PID or pkill -2 PNAME.
# Again ..
sleep 9999999
# Now, try SIGHUP, SIGINT, SIGKILL or SIGKILL and see what happens.
pkill -1 sleep
pkill -2 sleep
pkill -9 sleep
pkill -15 sleep
# Or with kill if you want.
# Does the sleep process stop? Does it print anything?TODO!
Perhaps?