Featured image of post Linux Signals in a Nutshell

Linux Signals in a Nutshell

SIGKILL, SIGTERM, SIGHUP, SIGSTOP, SIGCONT

Linux Signals in a Nutshell

Ah, Linux signals! They are like the universe’s way of telling processes, “Hey, wake up! Something important is happening!” Or in some cases, “Hey, die already!”

If you’ve ever been mystified by terms like SIGKILL, SIGTERM, or SIGHUP, then buckle up. This is your crash course in Linux signals—explained in a way that even your pet cat could understand (assuming your cat has an interest in process management).

What Are Signals?

Signals are software interrupts sent to processes. Think of them like text messages for processes, except instead of “Hey, what’s up?” it’s more like “Terminate immediately!” or “Pause for a second!”

The kernel, users, or even the process itself can send signals. Each signal has a predefined number, but since humans prefer words over numbers, they also have names like SIGTERM (15) and SIGKILL (9).

The Most Famous Signals (A.K.A The Usual Suspects)

SIGTERM (15): The Polite Goodbye

This is the equivalent of saying, “Hey buddy, time to wrap things up and leave.” It asks a process to terminate nicely, allowing it to clean up resources before exiting. Most well-behaved processes will comply.

SIGKILL (9): The Merciless Executioner

This is the nuclear option. If SIGTERM is a polite tap on the shoulder, SIGKILL is a sledgehammer to the face. The process doesn’t get a chance to clean up—it’s just gone. Use this when a process is stubbornly ignoring SIGTERM.

SIGHUP (1): The “Hey, Wake Up!”

Originally meant for when a user logs out (or the terminal disconnects), but it’s also used to tell daemons to reload their configurations. Many services like Apache or Nginx respect this signal.

SIGINT (2): The Ctrl+C Effect

Ever pressed Ctrl+C in a terminal to stop a running process? That’s SIGINT in action. It tells the process, “Hey, I’m done with you!” and politely asks it to exit.

SIGSTOP (19) & SIGCONT (18): The Pause and Play Buttons

  • SIGSTOP freezes a process, like pausing a video.
  • SIGCONT resumes it, like hitting play.

These are great for debugging or for when you want to stop and restart a process without killing it.

How to Send Signals

Using kill

The kill command is your go-to for sending signals. Despite its name, it can send any signal—not just SIGKILL.

1
kill -SIGTERM <pid>

Or, using numbers:

1
kill -15 <pid>

For the sledgehammer approach:

1
kill -9 <pid>

Using killall

Want to send a signal to multiple processes by name? killall is your friend.

1
killall -SIGTERM firefox

Using pkill

pkill is like killall but supports pattern matching. Want to nuke all Chrome instances?

1
pkill -9 chrome

Using trap

Want to handle signals in a script? Use trap.

1
trap "echo Oh no, I got a SIGTERM!" SIGTERM

This lets your script react to signals instead of just dying instantly.

Why Should You Care About Signals?

  • Graceful Shutdowns: Servers and apps should clean up before exiting, preventing data corruption.
  • Debugging: SIGSTOP and SIGCONT help when debugging processes.
  • Automating Tasks: Signals help control processes in scripts.

Key Ideas

ConceptExplanation
SignalsSoftware interrupts sent to processes
SIGTERM (15)Politely asks a process to terminate
SIGKILL (9)Forcefully kills a process
SIGHUP (1)Reloads configuration or detects logout
SIGINT (2)Triggered by Ctrl+C to interrupt a process
SIGSTOP (19)Pauses a process
SIGCONT (18)Resumes a paused process
kill commandSends signals to processes
trap commandHandles signals in scripts

References

  1. Linux Man Pages - Signal
  2. Kill Command in Linux
  3. SIGHUP Explained