我试图重新附加到长时间运行的 tmux 会话来检查 python Web 应用程序。但是tmux attach
声称没有正在运行的会话,并ps
显示一个tmux
进程(第一行),但带有问号而不是数字pts
。
这意味着什么——这个 tmux 会话是否永久丢失?可能是什么原因导致的?是否还有办法查看在 tmux 会话中生成并在pts/19
(第二行)中运行的 python 进程的当前状态?
[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 会话的控制。