Ubuntu で tmux の PPID が 1 なのはなぜですか?

Ubuntu で tmux の PPID が 1 なのはなぜですか?

背景:

  • ssh経由でUbuntuサーバーに接続する
  • tmuxを実行してデタッチする

tmux の PPID が 1 なのはなぜですか? tmux ランタイム メカニズムに関する情報はありますか?

答え1

tmuxはクライアント サーバー アーキテクチャで実行されます。シェルから実行すると、シェルの子であるクライアントが実行されます。(シェル以外から、たとえば から直接tmux実行することも可能です。この詳細は何も変わりません)。tmuxsshd

tmuxクライアントは、ユーザーに関連付けられたサーバーを見つけようとしますtmux。サーバーが見つからない場合、クライアントはエラーを報告したり (例tmux attach-session)、サーバーを起動して (例tmuxは と同等のsole tmux new-session)、ジョブを実行したりすることがあります。

クライアントの役割は、tmuxサーバーと通信して、サーバーに何かを実行させることです。

tmuxサーバーの起動が必要な場合は、サーバーclone(2)自体を起動します。その結果生じた子プロセスはすぐにclone再度起動し、終了します。最新のプロセスが実際のtmuxサーバーとなり、親が死亡しているためPPIDは1です中間プロセスの唯一の仕事は、サーバーをその祖先から「切り離す」ことであるように見えます。

tmuxサーバーが何らかのクライアントの直接の子でtmux、クライアントが停止した後にのみ PPID 1 を取得する場合は、機能すると思います。 の全体的なポイントはtmux、元のクライアントが切り離された後もサーバーが実行し続けることです。したがって、サーバーが何らかのクライアントの子である場合、遅かれ早かれ孤立する可能性が高くなります。また、一般にtmuxクライアントは任意のシェルまたは別のプロセスから実行できるため、そのシェルまたは別のプロセスは、その子の子を監視したり、シグナルを送信したりしようとする可能性があるため、できるだけ早くサーバーを孤立させるのは合理的なことです。

したがって、サーバーはほぼ即座に PPID 1 を取得します。サーバー内で実行するすべてのシェルまたは他のプロセスは、tmuxサーバーの子孫です。(再)接続すると、クライアントsshdに表示される内容が表示されます。クライアント自体は、それを呼び出したシェル (またはその他) の子です。クライアントはサーバーと通信し、キーストロークをサーバーに渡し、ウィンドウの外観に関する情報を受け取り、それに応じて文字を出力します。

サーバーは、一度起動すると、その中のすべてのセッションが終了するまで実行されます。つまり、サーバーを正常に終了するには、ペインであるすべてのシェル (またはその他のプロセス) を終了する必要があります。

このアーキテクチャは、最初に呼び出された の環境tmuxが保持される理由を説明していますが、一般にtmuxクライアントの環境は重要ではありません。サーバーは最初の の孫として起動するtmuxため、環境を継承できます。その後はすべてサーバーに依存します。サーバーが実行している限り、サーバーも新しく生成されたプロセス (ペイン) もこのクライアントの子孫ではないため、後のクライアントから直接継承されることはありません。私のこの答え

関連情報