我試圖重新附加到長時間運行的 tmux 會話來檢查 python Web 應用程式。但是tmux attach
聲稱沒有正在運行的會話,並ps
顯示一個tmux
進程(第一行),但帶有問號而不是數字pts
。
這意味著什麼——這個 tmux 會話是否永久丟失?是否還有辦法查看 python 進程的當前狀態,在 tmux 會話中產生並在pts/19
(第二行)中運行?
[mhermans@web314 ~]$ ps -ef | grep mhermans
mhermans 16709 1 0 Mar04 ? 00:26:32 tmux
mhermans 8526 16710 0 Mar04 pts/19 00:20:04 python2.7 webapp.py
root 9985 6671 0 10:18 ? 00:00:00 sshd: mhermans [priv]
mhermans 10028 9985 0 10:18 ? 00:00:00 sshd: mhermans@pts/16
mhermans 10030 10028 0 10:18 pts/16 00:00:00 -bash
mhermans 16247 10030 6 10:28 pts/16 00:00:00 ps -ef
mhermans 16276 10030 0 10:28 pts/16 00:00:00 grep mhermans
mhermans 16710 16709 0 Mar04 pts/19 00:00:00 -bash
mhermans 16777 16709 0 Mar04 pts/21 00:00:00 -bash
答案1
解決方案由Webfaction 支持:
由於進程仍在運行,問題是套接字被刪除,可能是由清除的 tmp 目錄引起的。
根據tmux
地圖:
如果套接字被意外刪除,SIGUSR1 訊號可能會被傳送到 tmux 伺服器進程以重新建立它。
因此發送信號並附加工作:
killall -s SIGUSR1 tmux
tmux attach
答案2
終端缺席是分離會話的標誌。您tmux
可以這樣找到所有會話名稱:
ls $TMP/tmux-$(id -u)
或者ls /var/run/tmux/tmux-$(id -u)
——這有點依賴發行版。幾乎獨立於發行版(並且更核心)的是:
lsof -n -p 16709 -a -U
16709
您清單中 tmux 的 PID 位於何處。
答案3
就是這樣這個之前的答案在這裡幫助了我(哇!)。我試圖解決確切地我連接到一個 Tmux 的情況——我可以在 中看到tmux ls
,但在 中ps
,我還可以看到其他tmux,它沒有列出,tmux ls
因此我無法透過使用它的名稱附加到它(tmux attach -t myOldbas)
以下是完整的詳細資訊。流程:
71358 1849 9617 0 Sep04 pts/29 00:00:00 /bin/bash
71358 2528 9617 0 Aug31 pts/25 00:00:00 /bin/bash
71358 9617 1 0 Aug31 ? 00:08:55 tmux new -s myOld
71358 9618 9617 0 Aug31 pts/20 00:00:00 /bin/bash
71358 20199 33189 0 Sep16 pts/27 00:00:00 vim log
71358 20415 32257 0 Sep16 pts/30 00:00:00 /bin/bash
71358 24735 32257 0 Sep16 pts/33 00:00:00 /bin/bash
71358 32257 1 0 Sep16 ? 00:04:02 tmux new -s myses
現在,lsof 位真正幫助了我——當你這樣做的時候兩個過程,在我的例子中是 32257(我能看到的)和 9617(舊的)
/usr/sbin/lsof -n -p 32257 -a -U
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
..
tmux 32257 uzer.buzer 7u unix 0xffff881ff0c73480 0t0 995795763 /tmp/uzer.buzer/tmux-71358/default
然而,當我在舊的 PID 上使用時,我看到了以下內容
/usr/sbin/lsof -n -p 9617 -a -U
tmux 9617 uzer.buzer 7u unix 0xffff881ff0c73480 0t0 995795763 /tmp/tmux-71358/default
注意,最後一個套接字路徑有何不同? 幸運的是,這就是我所需要的,然後我使用明確套接字執行了附加命令:
tmux -S /tmp/tmux-71358/default at
我在裡面!
答案4
對於以後遇到此主題的人;
如果您用於sudo
執行腳本或其他內容,則tmux
會話會在 root 下列出,而不是在使用 sudo 的使用者下列出,因為 sudo 之後的操作是在 root 下執行的。
要解決此問題,請使用sudo tmux a
, 或tmux
作為 root 重新獲得對 tmux 會話的控制。