Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Standby: Cross-Platform Time Management Tool
A comprehensive, production-ready Rust CLI tool for time management across all platforms. Standby provides a unified interface for sleep, timeout, wait, and delay operations with full POSIX compliance and GNU coreutils compatibility.
Features
-
Universal Time Format Parser: Flexible parsing of time durations
- Integer seconds:
5 - Floating-point seconds:
5.5 - Unit suffixes:
1s,1m,1h,1d - Compound formats:
1h30m45s - Special values:
infinity
- Integer seconds:
-
Cross-Platform Support: Works seamlessly on Unix/Linux, macOS, and Windows
- Native signal handling for Unix/Linux
- Windows console handler support
- Platform-specific optimizations
-
Three Core Commands:
- sleep - Suspend execution for a specified duration
- timeout - Run commands with time limits and signal escalation
- wait - Wait for processes to complete with optional timeout
Building
The binary will be at target/release/standby.
Usage
Sleep Command
# Basic usage (5 seconds)
# Various time formats
Timeout Command
# Run a command with a 10-second timeout
# Using signal options
# Signal escalation: send SIGTERM, then SIGKILL after 2 seconds
# Preserve exit status of the command
# Run in foreground process group (like GNU timeout --foreground)
# Enable verbose debugging (shows timing, PIDs, signal details)
Advanced Terminal Handling:
Standby's timeout command includes world-class terminal state restoration:
- Automatically restores terminal attributes (echo, canonical mode, etc.)
- Restores cursor visibility after killing TUI applications (vim, less, top)
- No need to run
resetortput cnormafter timeout - Handles SIGTTIN/SIGTTOU signals for background process terminal access
- Uses safe
process_group()API instead of unsafepre_exec
Signal Support:
Supported signals vary by platform. Use -s TERM, -s KILL, -s INT, -s STOP, -s CONT, -s TSTP, or -s HUP:
| Signal | Number | Linux/macOS | Windows | Purpose |
|---|---|---|---|---|
| TERM | 15 | ✅ | ⚠️ | Graceful termination request |
| KILL | 9 | ✅ | ✅ | Forceful termination (cannot be caught) |
| INT | 2 | ✅ | ⚠️ | Interrupt signal (Ctrl+C) |
| STOP | 19 | ✅ | ❌ | Pause process (cannot be caught) |
| CONT | 18 | ✅ | ❌ | Resume paused process |
| TSTP | 20 | ✅ | ❌ | Terminal stop (like Ctrl+Z, can be caught) |
| HUP | 1 | ✅ | ❌ | Hangup signal (terminal closed) |
Platform Notes:
- Unix/Linux: Full signal support including SIGSTOP/SIGCONT for job control
- Windows: Limited to KILL (via TerminateProcess); use
--kill-after 0for immediate forceful termination - For graceful termination on all platforms, use the default
-s TERMand specify--kill-aftertimeout
Wait Command
# Wait for a process to complete
# Wait for multiple processes
# Wait with timeout
Completions Command
# Generate bash completion script
# Generate zsh completion script
# Generate fish completion script
# Install bash completions (Ubuntu/Debian)
|
# View bash completion script
Completion Features:
- Bash: Full subcommand and signal completion
- Zsh: Option and subcommand completion with descriptions
- Fish: Comprehensive descriptions for all options and signals
Testing
Run all tests (unit + integration):
Run only unit tests:
Run only integration tests:
Project Structure
src/
├── main.rs # CLI entry point
├── lib.rs # Library exports
├── errors.rs # Error types
├── terminal.rs # Terminal state management (RAII guard)
├── commands/
│ ├── mod.rs # Command CLI setup
│ ├── sleep.rs # Sleep subcommand
│ ├── timeout.rs # Timeout subcommand
│ └── wait.rs # Wait subcommand
├── time/
│ ├── mod.rs # Time module exports
│ ├── parser.rs # Duration format parser
│ └── duration.rs # Duration type
└── signals/
├── mod.rs # Signal handler abstraction
├── unix.rs # Unix/Linux signal handling (7 signals)
└── windows.rs # Windows signal handling (TerminateProcess)
tests/
└── integration_tests.rs # End-to-end tests
POSIX Compliance
Standby is designed with POSIX compliance as the baseline, with extensions for GNU coreutils compatibility:
- ✅ POSIX sleep with integer seconds
- ✅ GNU extensions: floating-point, unit suffixes
- ✅ Signal handling per POSIX specification
- ✅ Process timeout implementation
- ✅ Cross-platform compatibility
Test Coverage
-
20 unit tests covering:
- Time format parsing (integer, float, suffixes, compound)
- Duration calculations
- Special values (infinity)
-
14 integration tests covering:
- Sleep with various time formats
- Timeout with process termination
- Signal handling
- CLI help and version
- Error handling
Exit Codes
0: Successful completion1: Timeout occurred or command failed- Other codes: Exit code from the executed command
Dependencies
- clap - CLI argument parsing with derive macros
- thiserror - Error handling
- nix - Unix syscall bindings (Unix only)
- winapi - Windows API bindings (Windows only)
Note: Minimal dependency footprint with no async runtime or external signal handling libraries for synchronous CLI operations.
Performance
Standby is compiled to native binaries with optimizations enabled, providing near-native performance with minimal overhead.
Features & Timeline
Completed (v0.1.2)
- Support for additional signals (SIGSTOP, SIGCONT, SIGTSTP, SIGHUP)
- Windows TerminateProcess support for SIGKILL
- RAII terminal guard pattern for guaranteed restoration
Completed (v0.2.0)
- Linux timerfd support for nanosecond-precision timeouts (~1μs latency)
- macOS adaptive polling for efficient timeout handling (1-10ms latency)
- Shell completion scripts for bash, zsh, and fish
- Optional verbose mode (
-v/--verbose) for timeout troubleshooting - Debug logging with timing information and signal details
Future Enhancements
- True kqueue integration for macOS (currently uses adaptive polling)
- Real-time timer precision improvements (sub-microsecond)
- Integration with system schedulers (cron, at)
- Resource limits (CPU time, memory usage tracking)
License
MIT or Apache 2.0 (standard Rust project licenses)