PMDaemon - Advanced Process Manager
A high-performance process manager built in Rust, inspired by PM2 with innovative features that exceed the original. PMDaemon is designed for modern application deployment with advanced port management, real-time monitoring, and production-ready web APIs.
๐ Table of Contents
- Key Features
- Installation
- Quick Start
- Command Reference
- Configuration Options
- Web API
- Monitoring
- Comparison with PM2
- Library Usage
- Testing
- Roadmap
- Contributing
- License
The CLI

๐ Key Features
Core Process Management
- Process Lifecycle - Start, stop, restart, reload, and enhanced delete operations
- Enhanced Delete Operations - Bulk deletion, status-based deletion, and safe process shutdown
- Clustering - Run multiple instances with automatic load balancing
- Auto-restart - Automatic restart on crashes with configurable limits
- Signal Handling - Graceful shutdown with SIGTERM/SIGINT and custom signals
- Configuration Persistence - Process configs saved and restored between sessions
Advanced Monitoring & Health Checks
- Real-time Monitoring - CPU, memory, uptime tracking with system metrics
- Memory Limit Enforcement - Automatic restart when processes exceed memory limits
- HTTP Health Checks - Monitor process health via HTTP endpoints with configurable timeouts
- Script-based Health Checks - Custom health check scripts for complex validation
- Blocking Start Command - Wait for processes to be healthy before returning from start command
- Log Management - Separate stdout/stderr files with viewing and following
๐ Innovative Port Management (Beyond PM2)
- Port Range Distribution - Automatically distribute consecutive ports to cluster instances
- Auto-assignment - Find first available port in specified range
- Conflict Detection - Prevent port conflicts at the process manager level
- Runtime Port Overrides - Change ports during restart without modifying saved config
- Port Visibility - Display assigned ports in process listings
Web API & Real-time Updates
- REST API - Full process management via HTTP with PM2-compatible responses
- WebSocket Support - Live process status and system metrics streaming
- Production Web Server - Built on Axum with CORS and security headers
๐ฆ Installation
From Source
Using Cargo
๐ Quick Start
Basic Process Management
# Start a process
# List all processes
# Stop a process
# Restart a process
# Delete a process (stops if running)
# Delete all processes
# Delete processes by status
Clustering with Port Management
# Start 4 instances with port range
# Auto-assign ports from range
# Runtime port override (doesn't modify saved config)
Memory Limits and Monitoring
# Set memory limit with auto-restart
# Real-time monitoring with configurable intervals
# View logs
# Follow logs in real-time
Health Checks and Blocking Start
# Start with HTTP health check and wait for ready
# Start with script-based health check
# Custom health check timeout
Web API Server
# Start web API server for remote monitoring
๐ Command Reference
| Command | Description | Example |
|---|---|---|
start |
Start a new process | pmdaemon start app.js --name myapp |
stop |
Stop a process | pmdaemon stop myapp |
restart |
Restart a process | pmdaemon restart myapp |
reload |
Graceful restart | pmdaemon reload myapp |
delete |
Delete process(es) | pmdaemon delete myapp |
| Delete all processes | pmdaemon delete all --force |
|
| Delete by status | pmdaemon delete stopped --status |
|
list |
List all processes | pmdaemon list |
monit |
Real-time monitoring | pmdaemon monit --interval 2 |
logs |
View/follow process logs | pmdaemon logs myapp --follow |
info |
Process details | pmdaemon info myapp |
web |
Start web API server | pmdaemon web --port 9615 |
๐ง Configuration Options
Process Configuration
Port Management Options
| Option | Description | Example |
|---|---|---|
--port 3000 |
Single port assignment | Assigns port 3000 |
--port 3000-3005 |
Port range for clusters | Distributes 3000-3005 |
--port auto:4000-4100 |
Auto-find available port | First available in range |
Health Check Options
| Option | Description | Example |
|---|---|---|
--health-check-url <url> |
HTTP endpoint for health checks | http://localhost:9615/health |
--health-check-script <path> |
Script to run for health validation | ./scripts/health-check.sh |
--health-check-timeout <time> |
Timeout for individual health checks | 5s, 30s, 1m |
--health-check-interval <time> |
Interval between health checks | 10s, 30s, 1m |
--health-check-retries <num> |
Number of retries before failure | 3, 5, 10 |
--wait-ready |
Block start until health checks pass | Boolean flag |
--wait-timeout <time> |
Timeout for blocking start | 30s, 1m, 5m |
Delete Options
| Option | Description | Example |
|---|---|---|
delete <name> |
Delete single process by name/ID | pmdaemon delete myapp |
delete all |
Delete all processes | pmdaemon delete all |
delete <status> --status |
Delete processes by status | pmdaemon delete stopped --status |
--force / -f |
Skip confirmation prompts | pmdaemon delete all --force |
Valid statuses for --status flag:
starting- Processes currently starting uponline- Running processesstopping- Processes currently shutting downstopped- Processes that have exitederrored- Processes that crashed or failedrestarting- Processes currently restarting
Safety Features:
- All delete operations automatically stop running processes before deletion
- Interactive confirmation prompts for bulk operations (unless
--forceis used) - Graceful process shutdown with proper cleanup of files and ports
- Clear feedback showing how many processes were stopped vs. deleted
๐ Web API
PMDaemon provides a comprehensive REST API compatible with PM2:
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/processes |
List all processes |
POST |
/api/processes |
Start a new process |
DELETE |
/api/processes/:id |
Stop/delete a process |
GET |
/api/system |
System metrics |
GET |
/api/logs/:id |
Process logs |
WS |
/ws |
Real-time updates |
Example API Usage
# List processes
# Start a process
# WebSocket for real-time updates
๐ Monitoring
PMDaemon provides comprehensive monitoring capabilities:
Real-time Metrics
- CPU usage percentage
- Memory usage (RSS)
- Process uptime
- Restart count
- Port assignments
- Process state
- Process ID (PID) for debugging
Configurable Monitoring
- Configurable update intervals - Customize refresh rates (1s, 2s, 5s, etc.)
- Beautiful table formatting - Professional display using comfy-table
- Color-coded status indicators - Visual process state identification
- System overview - CPU, memory, load average, and uptime
Log Management
- Separate stdout/stderr files
- Real-time log following -
tail -ffunctionality for live log monitoring - Configurable log retrieval - Get last N lines from log files
- Missing file handling - Graceful handling of non-existent log files
- HTTP log access via API
๐ PMDaemon vs PM2
| Feature | PMDaemon | PM2 |
|---|---|---|
| Port range distribution | โ | โ |
| Auto port assignment | โ | โ |
| Runtime port override | โ | โ |
| Built-in port conflict detection | โ | โ |
| HTTP health checks | โ | โ |
| Script-based health checks | โ | โ |
| Blocking start command | โ | โ |
| Configurable monitor intervals | โ | โ |
| Real-time log following | โ | โ |
| Professional table formatting | โ | โ |
| PID display in monitoring | โ | โ |
| Enhanced delete operations | โ | โ |
| Bulk deletion (delete all) | โ | โ |
| Status-based deletion | โ | โ |
| Safe process shutdown | โ | โ |
| Memory limit enforcement | โ | โ |
| WebSocket real-time updates | โ | โ |
| Rust performance | โ | โ |
| PM2-compatible API | โ | โ |
Process Flowchart
graph TD
17017["User<br>External Actor"]
subgraph 17008["PMDaemon Application<br>Rust"]
17009["CLI Entry Point<br>Rust"]
17010["Web API & UI<br>Rust / HTTP"]
17011["Core Process Orchestrator<br>Rust"]
17012["Process Execution & State<br>Rust"]
17013["Configuration Service<br>Rust"]
17014["Process Health Monitor<br>Rust"]
17015["Metrics & Monitoring<br>Rust"]
17016["OS Signal Handler<br>Rust"]
%% Edges at this level (grouped by source)
17009["CLI Entry Point<br>Rust"] -->|Executes commands via| 17011["Core Process Orchestrator<br>Rust"]
17010["Web API & UI<br>Rust / HTTP"] -->|Manages processes via| 17011["Core Process Orchestrator<br>Rust"]
17010["Web API & UI<br>Rust / HTTP"] -->|Gets status from| 17015["Metrics & Monitoring<br>Rust"]
17016["OS Signal Handler<br>Rust"] -->|Notifies of OS signals| 17011["Core Process Orchestrator<br>Rust"]
17011["Core Process Orchestrator<br>Rust"] -->|Controls & Monitors| 17012["Process Execution & State<br>Rust"]
17011["Core Process Orchestrator<br>Rust"] -->|Loads/Saves config| 17013["Configuration Service<br>Rust"]
17011["Core Process Orchestrator<br>Rust"] -->|Manages| 17014["Process Health Monitor<br>Rust"]
17011["Core Process Orchestrator<br>Rust"] -->|Updates/Gets metrics from| 17015["Metrics & Monitoring<br>Rust"]
17011["Core Process Orchestrator<br>Rust"] -->|Initializes| 17016["OS Signal Handler<br>Rust"]
17014["Process Health Monitor<br>Rust"] -->|Checks status of| 17012["Process Execution & State<br>Rust"]
17015["Metrics & Monitoring<br>Rust"] -->|Collects metrics from| 17012["Process Execution & State<br>Rust"]
17012["Process Execution & State<br>Rust"] -->|Uses config from| 17013["Configuration Service<br>Rust"]
end
%% Edges at this level (grouped by source)
17017["User<br>External Actor"] -->|Uses CLI| 17009["CLI Entry Point<br>Rust"]
17017["User<br>External Actor"] -->|Accesses Web UI/API| 17010["Web API & UI<br>Rust / HTTP"]
๐ง Library Usage
PMDaemon can also be used as a Rust library:
use ;
async
๐งช Testing
PMDaemon has comprehensive test coverage:
# Run all tests
# Run with coverage
# Run documentation tests
# Run integration tests
# Run end-to-end tests
Test Coverage
- 223 Total Tests
- 146 Unit tests (including comprehensive delete operation tests)
- 13 Integration tests (including delete functionality tests)
- 8 End-to-end tests
- 56 Documentation tests
๐บ๏ธ Roadmap
Completed Features โ
- โ Core process management (Phase 1-3)
- โ CLI interface with all PM2-compatible commands (Phase 5)
- โ Advanced monitoring and logging (Phase 6)
- โ Web API and WebSocket support (Phase 7)
- โ Health checks and blocking start (Phase 8)
- โ Enhanced delete operations with bulk and status-based deletion
- โ Safe process shutdown and lifecycle management
- โ Comprehensive test suite (Phase 10.1-10.3)
In Progress ๐ง
- ๐ Integration examples and documentation (Phase 9)
- ๐ API documentation beyond docs.rs
- ๐ Performance benchmarks vs PM2
Future Enhancements ๐ฎ
- ๐จ v2.0 - Enhanced CLI with ratatui for interactive terminal UI
- ๐ Advanced metrics visualization
- ๐ Plugin system for custom monitors
- ๐ Distributed process management
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Guidelines
- Follow Rust best practices and idioms
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Inspired by PM2 - The original Node.js process manager
- Built with Rust for performance and safety
- Uses Tokio for async runtime
- Web server powered by Axum
PMDaemon - Process management, evolved. ๐