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 9999
To 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 sleep
33312 ttys003 0:00.00 sleep 9999999
33312 is our ID.
# Now kill it!
kill 33312
With 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 sleep
kill
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?