11ba76c0fb
shutdown_mcp_servers() blocks on future.result(timeout=15) which, called from the gateway event-loop thread during SIGTERM teardown, freezes the loop for up to 15s when the MCP loop and its stdio children are torn down concurrently. Supervisors with a shorter kill grace (s6-overlay: 3s) SIGKILL the gateway before lifecycle_ledger.mark_exited() runs, producing phantom 'exited UNCLEANLY' reports on every subsequent boot. Run the sync shutdown on a daemon thread and poll via _await_thread_exit with a 5s budget; proceed with teardown if it wedges. Fixes #82874; completes the shutdown half of #64155.