工作方式TMUX(1)
是让客户端进程 ( tmux
) 连接到服务器进程(tmux
也连接到服务器进程,但不连接到 TTY),如下面的ps
输出所示:
PID TTY STAT TIME COMMAND
19229 pts/1 S+ 0:00 tmux
19231 ? Ss 0:00 tmux
这表明客户端实际上在服务器之前启动(可以假设它分叉了它)。
分离/重新附加后,相同的ps
命令输出:
PID TTY STAT TIME COMMAND
19231 ? Ss 0:00 tmux
19290 pts/1 S+ 0:00 tmux attach
这将 tmux 客户端显示为tmux attach
,因此更容易理解。
现在,如果我们查看pstree
上述两种情况的输出,我们都会得到两种情况(忽略 的pid
变化tmux attach
):
pstree -p
init(1)─┬─acpid(1824)
├─cron(1859)
⋮
├─sh(14146)───tmux(19229)
└─tmux(19231)───sh(19233)───pstree(19234)
清楚地显示pstree
在客户端进程(PID)中键入的命令(在这种情况下)19229
由服务器一(PID)执行,因此在客户端丢失(例如通过 ssh)的情况下允许它们在没有SIGHUP19231
的情况下继续)。
tmux
现在,对于 OP 提出的问题:在返回的情况下会发生什么情况failed to connect to server: Connection refused
是服务器进程(在我们的例子中是 pid 19231)无法访问,无论是什么原因(可能是因为服务器进程死了;但也因为用户执行tmux
客户端无权访问 tmux 套接字等)
在这种情况下,解决方案是grep
针对tmux
进程(ps
例如通过),并祈祷您没有收到此错误,因为服务器已死(因此您可以通过使用lsof
获取它侦听的套接字来附加到它)。否则,无法连接到服务器,因为它就像重新启动后一样死机。
TL;博士:
此错误可能有多种原因,从错误到严重故障(程序死亡)。简而言之,使用您可以使用的 UNIX 工具来确定tmux
使用什么套接字,如果它仍在运行(如果您有 tmux 客户端运行,则应该至少有两个进程 - 这发生在调用tmux
或tmux attach
从 shell 之后),因此如果您丢失了会话。
注意:正如其他答案所指出的,如果显示此错误的原因是套接字错误,则可以使用该-L
标志来告知tmux
使用特定的套接字。