2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00
2026-03-13 13:59:56 -07:00

Note: The TUI is more complete and functional than the GUI

Process Monitor

A comprehensive system and process monitoring application written in Rust with both Terminal UI (TUI) and Graphical UI (GUI) interfaces.

Features

System Monitoring

  • CPU Monitoring

    • Overall CPU usage percentage
    • Per-core CPU usage with visualization
    • CPU temperature tracking
    • CPU frequency monitoring
  • Memory Monitoring

    • Total, used, and available memory
    • Swap memory usage
    • Per-process memory consumption
  • GPU Monitoring

    • GPU usage percentage
    • VRAM usage
    • GPU temperature
    • Support for AMD GPUs (via sysfs)
  • Network Monitoring

    • Per-interface network statistics
    • Bytes sent/received
    • Packets sent/received
    • Error tracking
  • Disk I/O Monitoring

    • Read/write operations per device
    • Bytes read/written
    • Per-process disk I/O tracking
  • USB Monitoring

    • Connected USB device detection
    • Device identification (vendor/product IDs)

Process Monitoring

  • Real-time process listing
  • Process owner (user) tracking
  • Per-process statistics:
    • CPU usage
    • Memory usage (RSS and virtual)
    • Disk I/O (read/write bytes)
    • Thread count
    • Process status
    • Runtime duration

Misbehavior Detection

Automatic detection of misbehaving applications based on configurable rules:

  • High CPU Usage: Alerts when processes exceed CPU thresholds
  • Memory Leaks: Detects processes with excessive memory consumption
  • Excessive Disk I/O: Identifies processes with high disk activity
  • Zombie Processes: Flags processes in zombie state
  • Network I/O: Monitors excessive network usage

Default alert levels:

  • Critical: Immediate attention required (>95% CPU, >8GB RAM)
  • Warning: Potential issues (>80% CPU for 60s, >2GB RAM for 30s)
  • Info: Informational alerts

Architecture

The project is organized as a Cargo workspace with three crates:

procmon/
├── procmon-core/       # Core monitoring library
│   ├── monitor.rs      # System monitoring implementation
│   ├── metrics.rs      # Metric data structures
│   ├── process.rs      # Process information types
│   └── detector.rs     # Misbehavior detection logic
├── procmon-tui/        # Terminal UI application
│   ├── main.rs         # TUI entry point
│   ├── app.rs          # Application state
│   └── ui.rs           # Rendering logic
└── procmon-gui/        # Graphical UI application
    └── main.rs         # GUI application with egui

Building

Prerequisites

  • Rust 1.70 or later
  • Linux (designed for Linux systems)

Build Commands

Build all components:

cargo build --release

Build individual components:

cargo build --release -p procmon-tui
cargo build --release -p procmon-gui

Running

Terminal UI (TUI)

cargo run --release -p procmon-tui

Graphical UI (GUI)

cargo run --release -p procmon-gui

TUI Controls

  • q or Ctrl+C: Quit application
  • Tab: Next tab
  • Shift+Tab: Previous tab
  • 1-4: Jump to specific tab (Dashboard, Processes, Network, Alerts)
  • ↑/↓: Navigate process list
  • s: Change sort column
  • a: Toggle sort order (ascending/descending)
  • f: Toggle filter for misbehaving processes

TUI Tabs

  1. Dashboard: System overview with CPU, memory, temperature, and top processes
  2. Processes: Detailed process list with sorting and filtering
  3. Network: Network interfaces and disk I/O statistics
  4. Alerts: Real-time misbehavior alerts

GUI Features

The GUI provides an alternative interface with the same monitoring capabilities:

  • Dashboard Tab: Visual system overview with graphs and gauges
  • Processes Tab: Sortable process table
  • Network & I/O Tab: Network interfaces and disk statistics
  • Alerts Tab: Color-coded alert list

Dependencies

Core Monitoring

  • sysinfo: Cross-platform system information
  • procfs: Linux /proc filesystem parsing
  • nix: Unix system APIs

TUI

  • ratatui: Terminal UI framework
  • crossterm: Terminal manipulation

GUI

  • egui: Immediate mode GUI framework
  • eframe: egui application framework

Common

  • tokio: Async runtime
  • serde: Serialization
  • chrono: Date/time handling
  • tracing: Logging

Platform Support

Currently optimized for Linux. The application reads from:

  • /proc/ filesystem for process information
  • /sys/class/thermal/ for CPU temperature
  • /sys/class/drm/ for GPU information
  • /sys/bus/usb/devices/ for USB devices
  • /proc/diskstats for disk I/O
  • /etc/passwd for user information

Customizing Misbehavior Rules

The misbehavior detector can be customized by modifying procmon-core/src/detector.rs. Default rules include:

MisbehaviorRule {
    name: "High CPU Usage",
    description: "Process using more than 80% CPU for extended period",
    condition: MisbehaviorCondition::CpuUsageAbove {
        threshold: 80.0,
        duration_secs: 60,
    },
    severity: Severity::Warning,
}

Performance

  • Updates every 1 second by default
  • Minimal CPU overhead (typically <1% on modern systems)
  • Efficient memory usage with bounded alert history (last 100 alerts)

Permissions

Some features may require elevated permissions:

  • Reading certain /proc entries may require root access
  • Hardware sensor data may need appropriate permissions

Run with sudo if you encounter permission errors:

sudo cargo run --release -p procmon-tui

License

MIT OR Apache-2.0

Contributing

Contributions are welcome! Areas for improvement:

  • NVIDIA GPU support (via NVML)
  • macOS and Windows support
  • Per-process network I/O tracking
  • Historical data graphing
  • Configuration file support
  • Export monitoring data to formats (CSV, JSON)

Troubleshooting

No GPU detected

  • Ensure GPU drivers are installed
  • Check /sys/class/drm/ exists and is accessible
  • AMD GPUs are currently better supported than NVIDIA

No temperature readings

  • Install lm-sensors package
  • Run sensors-detect to configure thermal sensors
  • Check /sys/class/thermal/ permissions

Inaccurate network stats

  • Network statistics are cumulative since boot
  • Ensure proper permissions to read network interface data

Technical Notes

CPU Usage Calculation

CPU usage is calculated by the sysinfo crate using process CPU time divided by elapsed time.

Memory Values

  • RSS (Resident Set Size): Physical memory used
  • Virtual Memory: Total virtual address space

Disk I/O

Disk I/O statistics are read from /proc/diskstats and represent cumulative values since boot.

Description
No description provided
Readme 71 KiB
Languages
Rust 99.3%
Shell 0.7%