次の出力に示すようにTMUX(1)
、クライアント プロセス ( tmux
) をサーバー プロセス (tmux
これも TTY に接続されていません) に接続することによって機能します。ps
PID TTY STAT TIME COMMAND
19229 pts/1 S+ 0:00 tmux
19231 ? Ss 0:00 tmux
これは、クライアントがサーバーの前に実際に起動することを示しています (サーバーが fork したと見なすことができます)。
デタッチ/再アタッチ後、同じ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
) によって実行されることを明確に示しているため、クライアント ターミナルが失われた場合 (たとえば ssh 経由) にSIGHUP19231
なしでコマンドを続行できます。 )。
ここで、OP が尋ねた質問に対して: サーバー プロセス (私たちの場合は pid 19231) が到達不能である場合に何が起こるかtmux
(failed to connect to server: Connection refused
サーバー プロセスが停止したためである可能性があります。また、ユーザーが実行しているために、tmux
クライアントに tmux ソケットにアクセスする権限がないなど)。
その場合の解決策は、grep
(たとえばtmux
経由ps
で) プロセスを処理し、サーバーが停止したためにこのエラーが発生しないことを祈ることです (したがって、使用lsof
してリッスンするソケットを取得することで接続できます)。そうしないと、再起動後と同じように機能しなくなるため、サーバーに接続する方法がありません。
TL;DR:
このエラーは、バグから重大な障害 (プログラムの停止) まで、さまざまな理由で発生する可能性があります。簡単に言えば、UNIX ツールを自由にtmux
使用して、ソケットがまだ実行されている場合 (tmux クライアントを実行している場合は、少なくとも 2 つのプロセスが必要です。これは、呼び出し後tmux
またはtmux attach
シェルから発生します)、したがって、ソケットが使用するものを決定します。セッションを失ったかどうか。
注:他の回答が指摘したように、このエラーが表示される理由がソケットエラーである場合、-L
フラグをtmux
使用して特定のソケットを使用するように指示できます。