Способ 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 19231
), что позволяет им продолжать работу без SIGHUP в случае потери клиентского терминала (например, через ssh).
Теперь к вопросу ОП задали: что происходит в случае, когда tmux
возвращает failed to connect to server: Connection refused
заключается в том, что процесс сервера (pid 19231 в нашем случае) недоступен, независимо от причины (это может быть потому, что процесс сервера умер;но также потому, что пользователь, выполняющий клиент tmux
, не имеет прав доступа к сокету tmux и т. д.)
Решение в этом случае заключается в grep
для процессов tmux
(черезps
, например), и молитесь, чтобы вы не получили эту ошибку, потому что сервер умер (поэтому вы можете подключиться к нему с помощью lsof
, чтобы узнать, какие сокеты он слушает).В противном случае невозможно присоединить к серверу, так как он не работает как после перезагрузки.
TL; DR:
Эта ошибка можетдавать по нескольким причинам, начиная от ошибки до критической ошибки (программа умерла).В двух словах, используйте имеющиеся в вашем распоряжении инструменты UNIX, чтобы определить, какой сокет использует tmux
, если он все еще работает (если у вас запущен клиент tmux, должно быть как минимум два процесса - это происходит после вызова tmux
илиtmux attach
из оболочки) и, таким образом, если вы потеряли сеанс или нет.
Примечание: как указывалось в других ответах, если причиной этой ошибки является ошибка сокета, вы можетеиспользуйте флаг -L
, чтобы указать tmux
использовать определенный сокет.