DaemonManager

DaemonManager is a lightweight, client-side library responsible for spawning, connecting to, and managing the lifecycle of the background zxdb-daemon process.

Core Features

  • Subprocess Lifecycle Management: Spawns zxdb-daemon using a platform-specific command-line wrapper (FxCmd).
  • Startup Synchronization: Block-waits for daemon readiness via an inherited pipe file descriptor (--ready-fd), guarding against premature crashes and startup timeouts.
  • Unix Domain Socket (UDS) Connectivity: Connects to the daemon over a local socket (default: /tmp/fx-debug-daemon.sock) and executes DAP session handshake verifications (HelloRequest/StartRequest).
  • Fault Tolerance & Cleanup: Automatically unlinks stale sockets on startup, prevents double-running daemon processes, and guarantees graceful (SIGTERM) or forceful (SIGKILL) process group cleanup on failures.

Directory Layout

  • manager.py: Core implementation of the DaemonManager class, lifecycle exceptions, and helper processes.
  • tests/test_manager.py: Thorough asynchronous unit and process-group integration tests.
  • BUILD.gn: Declares the python target library and its test target.

Usage

Downstream tools (such as fx test) import DaemonManager directly to coordinate background debugger attachments:

from daemon_manager import DaemonManager

manager = DaemonManager(port=15678, connect_to_existing=True)
process = await manager.start()