Skip to content

procs & bottom — Modern ps & top Alternatives

DodaTech Updated 2026-06-24 9 min read

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.

Can bottom monitor remote systems?

Not directly. Use bottom on the remote machine via SSH, or configure a monitoring agent like Prometheus/node_exporter for centralized monitoring.

Does procs work on macOS?

Yes — procs is cross-platform and works on macOS, Linux, and Windows.

Can I use bottom in a CI/CD pipeline?

bottom is interactive and requires a TTY. For non-interactive monitoring, use tools like top -bn1, ps, or monitoring agents.

How do I reset bottom to default layout?

Delete the config file: rm ~/.config/bottom/bottom.toml. On restart, bottom uses default settings.

What is the performance overhead of running bottom?

Minimal — bottom uses ~1-2% CPU on modern hardware. Disk and Process monitoring overhead is negligible.

What's Next

Developer Tooling — Full Guide
HTTPie & curlie — Modern cURL Alternatives
hyperfine — CLI Benchmarking Guide

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