Htop Clone System Monitor - C Implementation Specification - rtop

Project Overview

Create a terminal-based system monitoring tool in C that replicates htop's visual interface and functionality. The tool displays comprehensive system statistics in a dynamic, auto-refreshing interface with no external dependencies or interactive actions. The application name will be rtop.

Core Requirements

Language & Constraints

  • Implementation language: C (C99 or later)
  • No external library dependencies beyond standard C library
  • Single binary compilation with no runtime dependencies
  • Statically linked where possible
  • Cross-platform Linux support (primary focus: Linux kernel interfaces)

Data Sources

All system information must be read directly from:

  • /proc filesystem (process information, CPU stats, memory)
  • /sys filesystem (system-wide metrics)
  • Standard C library system calls (sysconf, getrlimit, etc.)
  • /etc system files (hostname, OS information)

Display Requirements

Terminal Interface

  • Auto-refreshing display (configurable interval, default 1-2 seconds)
  • Full-screen terminal rendering using raw terminal control
  • Handle terminal resize events gracefully
  • Color support for visual differentiation
  • UTF-8 character support for borders and separators

Information Categories

System Overview Section

  • Hostname and kernel version
  • Uptime (days, hours, minutes)
  • Current date and time
  • Load averages (1, 5, 15 minute)
  • System architecture

CPU Information

  • Total CPU count and logical cores
  • Per-core utilization percentages
  • Aggregate CPU usage
  • CPU frequency (current, min, max if available)
  • CPU temperature (if available from thermal zones)
  • Context switches per second
  • Interrupts per second

Memory & Swap

  • Total physical memory
  • Used and available memory
  • Memory utilization percentage
  • Cached and buffered memory
  • Swap total, used, free
  • Swap utilization percentage
  • Page faults and page in/out statistics

Process Statistics

  • Total process count
  • Running processes
  • Sleeping processes
  • Zombie/defunct processes
  • Stopped processes

I/O Statistics

  • Disk read/write operations per second
  • Disk bytes read/written per second
  • I/O wait time percentage
  • Network statistics (if available): bytes in/out, packets

Process Table

  • Scrollable list of running processes (or top N processes)
  • Per-process information:
    • Process ID (PID)
    • Parent PID (PPID)
    • User (UID or username)
    • CPU usage percentage
    • Memory usage percentage and absolute (RSS)
    • Virtual memory size (VSZ)
    • Process state (running, sleeping, zombie, etc.)
    • Command name and arguments (or executable path)
    • Thread count
    • Priority/Nice value

Network Information

  • Interface names and states
  • IP addresses (IPv4)
  • RX/TX bytes and packets
  • Network errors and dropped packets

Filesystem Statistics

  • Mount points and filesystems
  • Total, used, available space per mount
  • Utilization percentage
  • Filesystem type

Interface Layout

Header Section

Display system overview with high-level metrics in a compact, scannable format.

Metrics Panels

Organize information into logical sections:

  • CPU and thermal metrics
  • Memory and swap usage
  • Process counts and states
  • Network and I/O throughput
  • Filesystem usage

Process List

Table format showing top processes by CPU or memory usage, with sortable columns and clear visual hierarchy.

Display refresh rate, current timestamp, and interaction hints (if applicable).

Rendering Approach

Terminal Control

  • Use standard ANSI escape codes for cursor positioning, colors, and formatting
  • Implement double-buffering to prevent flicker
  • Clear and redraw entire screen on each refresh cycle
  • Handle terminal capabilities detection

Performance Considerations

  • Minimize system calls per refresh cycle
  • Cache system information that doesn't change frequently
  • Read /proc efficiently (sequential parsing)
  • Update only changed values in display
  • Target <5% CPU usage for the monitor itself

Color Scheme

  • Define a readable color palette using standard terminal colors (16-color or 256-color)
  • Use colors to highlight:
    • High utilization (red threshold)
    • Medium utilization (yellow threshold)
    • Normal ranges (green)
    • Neutral information (white/default)

Configuration & Behavior

Default Behavior

  • Refresh interval: 1-2 seconds (user-adjustable via command-line argument or config)
  • Start with full system view
  • Sort processes by CPU usage by default (or memory alternative)
  • Display processes in descending utilization order

Graceful Shutdown

  • Clean terminal state on exit (restore cursor visibility, reset colors)
  • Handle SIGINT (Ctrl+C) for clean termination
  • Restore terminal to pre-execution state

Edge Cases

  • Handle systems with unusual core counts (single-core, high-core systems)
  • Support systems with limited /proc filesystem features
  • Gracefully degrade missing data sources
  • Handle rapid terminal resizing without crashing

Data Update Strategy

Sampling Approach

  • Read all system metrics at regular intervals (matching refresh rate)
  • Calculate deltas for rate-based metrics (I/O operations, network traffic)
  • Maintain rolling history for trend calculation if needed

Metric Calculation

  • CPU usage: derived from /proc/stat (user, system, idle times)
  • Memory: from /proc/meminfo
  • Process metrics: from /proc/[pid]/stat, /proc/[pid]/status
  • I/O: from /proc/diskstats and /proc/net/dev

Compilation & Deployment

Build Requirements

  • Standard C compiler (gcc, clang)
  • Produces single static binary (or minimal dynamic linking)
  • No configuration files required at runtime
  • No installation script needed

Binary Size & Performance

  • Target executable size: <2MB
  • Startup time: <100ms
  • Refresh cycle: <100ms per iteration
  • Memory footprint: <10MB RSS during operation

Documentation

The tool should be self-documenting through:

  • Clear, logical screen layout
  • Labeled sections and columns
  • Metric units displayed inline
  • Help text on startup or in footer

Success Criteria

  • Displays 20+ distinct system metrics simultaneously
  • Updates smoothly at regular intervals
  • Survives 1+ hour continuous operation without memory leaks
  • Responsive to terminal size changes
  • No dependencies beyond libc
  • Compiles cleanly with -Wall -Wextra -std=c99
  • Provides useful system overview at a glance comparable to htop