在雲端開發環境(如 Coder)的「網頁 Terminal」裡跑 quasar dev 這類長駐 dev server,掛一段時間後會無故失效。根因是行程的生命被綁在「你正在看的那條連線」上;用 tmux 把行程交給背景 daemon 持有,就能在連線斷掉後續跑。
為什麼網頁 Terminal 一斷線行程就死
網頁 Terminal 是瀏覽器透過 WebSocket 連到 workspace 內一個互動式 shell session。quasar dev 是這個 session 的 child process,與 session 綁在同一個 PTY。當 WebSocket 斷線(關分頁、電腦睡眠、網路斷、閒置 timeout)→ PTY 關閉 → 系統對掛在該 PTY 的行程送出 SIGHUP → quasar dev 預設收到 SIGHUP 就結束。
為什麼 tmux 能讓行程持續
真正擁有行程的不再是你的 terminal,而是常駐在 workspace 背景的 tmux server daemon。網頁 terminal 只是臨時接上的 tmux client。quasar dev 跑在 tmux server 維護的、屬於 server(不屬於你連線)的獨立 PTY 上。WebSocket 斷線時只是 client 被 detach,server 與其 PTY 不受影響、不發 SIGHUP,行程照跑;重連後 tmux attach 再接一個 client 回去,畫面與 log 都還在。
常用指令
tmux new -s dev:建 session(名稱 dev)- 在 session 裡跑
quasar dev Ctrl+b然後d:detach,離開但行程續跑tmux ls:列出 sessiontmux attach -t dev:重連接回tmux kill-session -t dev:砍掉 session- 若
tmux new -s dev報duplicate session: dev,代表 session 已存在,改用tmux attach -t dev
重要限制
tmux 只能擋「連線斷線」這種死法。若 Coder 的 autostop(閒置自動停機)把整台 workspace 關掉,tmux server 一起被關,行程一樣會沒——那要靠調 workspace 的 autostop TTL 設定,不是 tmux 能救的。
回查線索
專案 ps-contract-analysis-page、Coder(coder/coder)網頁 Terminal、quasar dev、SIGHUP、PTY、autostop。