src: add --process-timeout=N
The Issue & Context
Existing methods to limit Node.js process runtime, like OS timeouts or setTimeout, are inconsistent, lack visibility into why a process is stuck, and fail to interrupt busy loops or native code blocks reliably.
Root Cause Analysis
OS-level timeouts vary across platforms and provide no diagnostic info; JavaScript timers only fire when the event loop is free, missing busy or blocked states; signals triggered diagnostics have similar limitations.
Solution Strategy & Architectural Pattern
Introduced a native watchdog thread that interrupts the main thread after a specified timeout, prints the JavaScript stack and event loop resource info if available, optionally outputs a full diagnostic report, and exits the process with code 124, ensuring consistent and informative timeouts across platforms.
Key Takeaway for Contributors
Native timeout enforcement with diagnostic output improves reliability and debuggability of long-running or stuck Node.js processes, but requires careful integration with other runtime options and attention to edge cases like CPU starvation or platform-specific behaviors.