procs & bottom — Modern ps & top Alternatives
In this tutorial, you'll learn about procs & bottom. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.
procs and bottom (btm) are modern replacements for ps and top/htop that provide color-coded output, tree views, filtering, sorting, and real-time system graphs for CPU, memory, disk, network, and sensors.
What You'll Learn
How to use procs for colorful, intuitive Process listing with tree view and Docker awareness. How to use bottom for real-time system monitoring with customizable widgets, disk I/O graphs, network activity, and temperature sensors.
Why Modern Process Tools Matter
ps aux and top are universal but show raw data without color, tree structure, or filtering. ps aux | grep python is the standard — but procs color-codes columns, auto-highlights search terms, and shows Process trees. htop improved on top but bottom takes it further with mouse support, customizable widget layouts, disk/network/sensor graphs, and GPU monitoring. DodaZIP's performance team uses bottom for real-time profiling of compression workloads, monitoring CPU per-core and disk I/O simultaneously.
Learning Path
flowchart LR A[HTTPie & curlie] --> B[procs & bottom
You are here] B --> C[Developer Tooling Complete] style B fill:#f90,color:#fff
procs — Modern Process Listing
Installation
# macOS
brew install procs
# Ubuntu/Debian
sudo snap install procs
# Or via cargo:
cargo install procs
# Fedora
sudo dnf install procs
# Arch
sudo pacman -S procs
# Download binary
curl -LO https://github.com/dalance/procs/releases/download/v0.14.5/procs_0.14.5_linux_amd64.deb
sudo dpkg -i procs_0.14.5_linux_amd64.deb
Basic Usage
# List all processes
procs
# Search by name
procs nginx
procs python
procs docker
# Search by PID
procs 1234
# Multiple keywords
procs nginx postgres
Expected output:
PID USER TTY CPU MEM TIME COMMAND
1234 root pts/0 0.1 2.3% 00:00:12 nginx: master process
1235 www-data pts/0 0.0 1.1% 00:00:05 nginx: worker process
5678 appuser ? 0.5 4.2% 00:02:34 python3 app.py
Display Options
# Tree view (show process hierarchy)
procs --tree
# Only show specified columns
procs --column pid,user,cpu,mem,command
# Available columns:
# pid, user, tty, cpu, mem, time, command, state, ppid, rss, vsz, args
# Watch mode (refresh every 2 seconds)
procs --watch
procs --watch=5 # Every 5 seconds
Filtering and Sorting
# Sort by CPU usage (descending)
procs --sort cpu
# Sort by memory
procs --sort mem
# Sort by PID
procs --sort pid
# Filter by condition
procs --and cpu>50 mem>100 # CPU > 50% AND memory > 100MB
procs --or nginx docker # nginx OR docker
# Case-insensitive search
procs --or nginx nginx 2>/dev/null # procs is case-insensitive by default
Docker and Systemd Awareness
# Show Docker containers with their processes
procs docker
# Show processes by systemd unit
procs --unit nginx.service
procs --unit postgresql.service
# Show processes by user
procs --user www-data
procs --user appuser
Custom Configuration
# ~/.config/procs/config.toml
[option]
color-mode = "auto"
disable-header = false
interval = 2
[template]
default = "PID USER CPU MEM TIME COMMAND"
[color]
cpu = "cyan"
mem = "yellow"
user = "green"
[colors.by-cpu]
"0-25" = "green"
"25-50" = "yellow"
"50-75" = "red"
"75-100" = "purple"
procs vs ps Comparison
# procs with search
procs python
# Equivalent ps:
ps aux | grep python
# procs tree view
procs --tree
# Equivalent ps tree:
ps aux --forest
bottom (btm) — Modern System Monitor
Installation
# macOS
brew install bottom
# Ubuntu/Debian
sudo snap install bottom
# Or via cargo:
cargo install bottom
# Fedora
sudo dnf install bottom
# Arch
sudo pacman -S bottom
# Download binary
curl -LO https://github.com/ClementTsang/bottom/releases/download/0.9.6/bottom_0.9.6_amd64.deb
sudo dpkg -i bottom_0.9.6_amd64.deb
# Start
btm
Basic Usage
# Start with default layout
btm
# Start with specific widgets
btm --cpu --memory --disk --network --process
# Start with basic mode (no graphs)
btm --basic
# Start with tree process view
btm --tree
# Color mode
btm --color default
btm --color gruvbox
btm --color nord
btm --color dracula
Default Layout Widgets
bottom's default layout shows:
| Widget | Location | Shows |
|---|---|---|
| CPU | Top left | Per-core utilization, overall usage, legend |
| Memory | Top right | RAM and swap usage, cache, buffers |
| Disk | Bottom | Read/write speed per disk, I/O activity |
| Network | Bottom | Download/upload speed per interface |
| Process | Full bottom | Process list with search, sort, tree |
Interactive Controls
| Key | Action |
|---|---|
? |
Help menu |
q |
Quit |
| Up/Down | Navigate Process list |
k |
Kill selected Process |
/ |
Search processes |
s |
Sort by selected column |
t |
Toggle tree view |
e |
Toggle Process grouping |
1 |
CPU widget focus |
2 |
Memory widget focus |
3 |
Disk widget focus |
4 |
Network widget focus |
+/- |
Zoom timeline in/out |
Tab |
Cycle widget focus |
Command-Line Options
# Default refresh rate (1 second)
btm -r 2 # 2 second refresh
# Limit process list
btm -p python # Show only python processes
btm -u appuser # Show only user processes
btm -S # Show only system processes
# Custom layout
btm -l full # Show all widgets
btm -l basic # Process list + basic info
btm -l cpu # CPU widget only
btm -l memory # Memory widget only
Custom Layout Configuration
# ~/.config/bottom/bottom.toml
[colors]
# Color scheme
table_header_color = "LightCyan"
table_header_color_inactive = "Grey"
[flags]
# Default flags
show_table_gradient = true
show_average_cpu = true
dot_marker = false
tree = true
group = true
[colors.by-cpu]
"0-25" = "Green"
"25-50" = "Yellow"
"50-75" = "Red"
"75-100" = "Purple"
[row_layout]
# Custom widget layout
[[row]]
[[row.child]]
ratio = 2
[[row.child.children]]
ratio = 3
type = "cpu"
[[row.child.children]]
ratio = 1
type = "proc"
[[row]]
[[row.child]]
ratio = 1
type = "memory"
[[row.child]]
ratio = 1
type = "disk"
[[row.child]]
ratio = 1
type = "network"
[[row.child]]
ratio = 1
type = "temp"
Sensor Monitoring
# Show temperature sensors (requires sensors/lm-sensors)
sudo apt install lm-sensors
sudo sensors-detect
# Then in bottom:
btm --temp
Expected sensor output shows:
Sensors:
CPU: +45.0°C (min: +30.0°C, max: +80.0°C)
Motherboard: +35.0°C
GPU: +42.0°C
NVMe: +38.0°C
GPU Monitoring
# If NVIDIA GPU:
# Install nvidia-ml-py for bottom
pip install nvidia-ml-py
# Start bottom with GPU widget
btm --gpu
Real-World Workflow
# 1. Quick process lookup
procs nginx
# 2. Find memory-hungry processes
procs --sort mem
# 3. Kill a stuck process from procs
# Note the PID, then:
kill -9 <PID>
# 4. Real-time system monitoring
btm
# 5. Check disk I/O during build
btm --disk --process
# 6. Monitor specific user processes
btm -u appuser
Common Errors
1. procs Shows No Color Output
The terminal does not support 256 colors. Force color mode: procs --color always. Check $TERM variable — set to xterm-256color or similar.
2. bottom Shows "Cannot open display"
bottom was started in a non-TTY environment (SSH without -t, or in a pipe). Run btm directly in a terminal.
3. procs Not Showing Docker Containers
procs shows Docker processes from the host. If running procs inside a container, it sees only the container's processes. Run from the host to see all containers.
4. bottom Widgets Not Updating
The default refresh rate is 1 second. If CPU is at 100%, the UI may appear frozen. Increase refresh rate: btm -r 2.
5. "Permission denied" for Certain Processes
Some processes are owned by other users. Run procs or bottom with sudo to see all processes: sudo procs or sudo btm.
6. bottom Process List Empty
The Process filter may be too restrictive. Check if -p or -u filters are active. Press Esc to clear search.
7. procs Column Width Messy on Narrow Terminals
Use less columns: procs --column pid,cpu,mem,command. The default layout works best on 80+ column terminals.
Practice Questions
1. How do you show processes sorted by memory usage with procs?
procs --sort mem — sorts by memory consumption in descending order.
2. How do you filter processes by name with procs?
procs python or procs nginx — searches Process names for the given term.
3. What key opens the help menu in bottom?
? — shows all keyboard shortcuts and widget controls.
4. How do you view per-core CPU utilization in bottom? bottom shows per-core usage by default in the CPU widget. Each core is displayed as a separate bar or graph.
5. What is the difference between bottom and htop? bottom provides disk I/O, network activity, and sensor graphs alongside Process management. htop focuses on Process management with a simpler interface. bottom is written in Rust and is more customizable.
Challenge: Set up bottom with a custom layout showing: (1) CPU widget with per-core graphs (40% width), (2) Memory widget with swap (20% width), (3) Disk I/O widget (20% width), (4) Process list sorted by CPU (20% width), (5) Temperature sensors in a small bar at the bottom. Then use procs to create an alias memhogs that shows the top 10 processes by memory usage in tree view with the command column. Compare the output with ps aux --sort -%mem | head -10.
What's Next
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. Updated 2026-06-24.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro