Skip to main content

TUI process monitor that groups processes by application

Project description

ptop3

PyPI version Python versions CI License: MIT

An htop-like TUI process monitor that groups processes by application.

Screenshots

Group view Main group view — processes grouped by application

Detail view Detail view — individual processes for a selected group

Tree view Tree view — process hierarchy within a group

Features

  • Groups processes by application name with smart alias resolution
  • Colored header with memory, swap, load-average badges
  • Sort by memory, CPU, RSS, swap, I/O, or count
  • Regex filter across app name, process name, and cmdline
  • Process tree view within a selected application group
  • Kill signals (SIGTERM / SIGKILL) for individual processes or entire groups
  • w key: clean swap by cycling swapoff/swapon (passwordless sudo)
  • d key: drop kernel caches (passwordless sudo)
  • Alerts for high CPU, memory, swap, disk usage, and zombie processes
  • Lite mode (--lite) for lower overhead on busy systems

Installation

pip install ptop3

Quick Start

ptop3                 # interactive TUI
python -m ptop3       # same via module
ptop3 --once          # print one-shot table and exit
ptop3 --filter python # filter to python processes

Sudo Setup

The w (swap-clean) and d (drop-caches) keys require root. Configure passwordless sudo once:

sudo ptop3 --init-subscripts

Or manually:

sudo visudo -f /etc/sudoers.d/ptop3
# Add:
# YOUR_USER ALL=(root) NOPASSWD: /path/to/ptop3-drop-caches
# YOUR_USER ALL=(root) NOPASSWD: /path/to/ptop3-swap-clean

Check sudo status:

ptop3 --check-sudo

CLI Reference

Flag Default Description
--once off Print one-shot table and exit
-f/--filter REGEX Filter by app/name/cmdline
-s/--sort KEY mem Sort key: mem, cpu, rss, swap, io, count
-n/--top N 15 Rows to show in --once mode
--refresh SECS 2.0 Refresh interval
--lite off Lite mode: skip cmdline/IO for tiny procs
--check-sudo Check sudo config for subscripts
--init-subscripts Write /etc/sudoers.d/ptop3

Key Bindings

Key Action
↑/↓ or j/k Move selection
PgUp/PgDn Page up/down
Home/End Jump to first/last
Enter or l Expand group to detail view
h Back to group view
t Toggle process tree (detail view)
s Cycle sort key
f Enter filter regex
r Reset filter
+/- Increase/decrease refresh interval
k/K Send SIGTERM/SIGKILL to selected
g Kill whole group (SIGTERM)
w Run swap-clean
d Drop caches
q or Ctrl-C Quit

Subscripts

The privileged subscripts can also be run directly:

ptop3-drop-caches --help
ptop3-drop-caches --level 1 --dry-run

ptop3-swap-clean --help
ptop3-swap-clean --safety-mb 256 --dry-run

Development

git clone https://github.com/spazyCZ/ptop3
cd ptop3
pip install -e ".[dev]"
pytest
ruff check ptop3/

Branching Strategy

feature/xyz  ──PR──►  test  ──PR──►  main  ──tag v*.*.*──►  release
Branch Purpose
feature/* Development — branch from test, PR back to test
test Staging — CI gate + auto-publish to TestPyPI on merge
main Production — only accepts PRs from test; tagged releases publish to PyPI

CI / CD

Workflow Trigger Action
CI push / PR to test or main ruff + pytest × Python 3.10–3.13 + Codecov
Claude Code Review PR opened / updated Automated code review
Claude Quality Gate PR to test or main Test coverage · changelog · security agents
Publish to TestPyPI merge to test Build + publish (skips existing versions)
Release push tag v*.*.* CI → GitHub Release with auto release notes
Publish to PyPI manual (workflow_dispatch) CI → publish to production PyPI

Release Process

  1. Merge all feature PRs into test and verify on TestPyPI:
    pip install -i https://test.pypi.org/simple/ ptop3
    
  2. Bump the version (run on test):
    bump-my-version bump patch   # or minor / major
    git push origin test
    
  3. Open a PR from testmain and merge once CI is green.
  4. Tag the release on main:
    git tag v0.x.y
    git push origin v0.x.y
    
    This creates the GitHub Release automatically.
  5. Publish to PyPI manually: Actions → Publish to PyPI → Run workflow — enter the tag.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ptop3-0.1.4.tar.gz (34.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ptop3-0.1.4-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file ptop3-0.1.4.tar.gz.

File metadata

  • Download URL: ptop3-0.1.4.tar.gz
  • Upload date:
  • Size: 34.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ptop3-0.1.4.tar.gz
Algorithm Hash digest
SHA256 00c7ce23ce5c6b363524fb248d84cbd8049e8747ae89d1c4215ea4667a17b4a0
MD5 4cc031cdcbcf3c89328c4586cada92c9
BLAKE2b-256 fad5ef2c63d6764642c0ac69daf6aa04beafc484c4600d63bf7df7dc18d38c03

See more details on using hashes here.

File details

Details for the file ptop3-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: ptop3-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ptop3-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ca98c5346feef7ddef1925bb13c2877821342b0a02c68d3cf38393c97f520627
MD5 3519fee9195a5677c570a109384733ab
BLAKE2b-256 2c936f4b7f7ab3c2e59796e2976121ea31bef2c1b3b6d6888465633fa5d7a1b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page