6.6 KiB
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
- Dashboard: System overview with CPU, memory, temperature, and top processes
- Processes: Detailed process list with sorting and filtering
- Network: Network interfaces and disk I/O statistics
- 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 informationprocfs: Linux /proc filesystem parsingnix: Unix system APIs
TUI
ratatui: Terminal UI frameworkcrossterm: Terminal manipulation
GUI
egui: Immediate mode GUI frameworkeframe: egui application framework
Common
tokio: Async runtimeserde: Serializationchrono: Date/time handlingtracing: 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/diskstatsfor disk I/O/etc/passwdfor 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
/procentries 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-sensorspackage - Run
sensors-detectto 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.