Created / Scheduled
Running on CPU
Sleeping (I/O wait)
Stopped (signal)
Zombie (exited, not reaped)
Dead (fully cleaned up)
How a Linux Process Lives and Dies
Every process in Linux follows the same lifecycle: it is created by a parent process using fork(), optionally replaced with a new program via exec(), runs until it calls exit(), and becomes a zombie until the parent reads its exit status with wait(). Click the steps above to explore each stage.
| State | ps STAT | Description | Key Syscall |
|---|---|---|---|
| Running | R | Actively using CPU or in the run queue | exec() |
| Sleeping (Interruptible) | S | Waiting for I/O, timer, or signal | read(), sleep() |
| Sleeping (Uninterruptible) | D | Waiting for disk I/O (cannot be killed) | Kernel I/O |
| Stopped | T | Paused by SIGSTOP or SIGTSTP (Ctrl+Z) | kill -STOP |
| Zombie | Z | Exited but parent has not called wait() | exit() |
| Dead | X | Fully removed from process table | wait() |