Warum ist die PPID von tmux unter Ubuntu 1?

Warum ist die PPID von tmux unter Ubuntu 1?

Hintergrund:

  • Stellen Sie über SSH eine Verbindung zum Ubuntu-Server her
  • Führen Sie tmux aus und trennen Sie

Warum ist die PPID von tmux 1? Gibt es irgendwelche Informationen zum Laufzeitmechanismus von tmux?

Antwort1

tmuxläuft in einer Client-Server-Architektur. Wenn Sie tmuxvon einer Shell aus ausführen, führen Sie einen Client aus, der ein untergeordnetes Element der Shell ist. (Es ist möglich, tmuxvon einer anderen Shell aus auszuführen, z. B. direkt von sshd, dieses Detail ändert nichts).

tmuxDer Client versucht, einen Server zu finden tmux, der Ihrem Benutzer zugeordnet ist. Wenn kein Server gefunden werden kann, beschwert sich der Client manchmal (z. B. tmux attach-session), und manchmal startet er einen Server (z. B. sole tmux, was gleichwertig ist mit tmux new-session) und erledigt dann seine Arbeit.

Die Aufgabe eines jeden tmuxClients besteht darin, mit dem Server zu kommunizieren und den Server dazu zu veranlassen, etwas zu tun.

Wenn tmuxein Server gestartet werden muss, tut er clone(2)das selbst. Der resultierende untergeordnete Prozess clonewird sofort wieder gestartet und dann beendet. Der neueste Prozess wird zum eigentlichen tmuxServer undseine PPID ist 1, weil sein Elternteil gestorben ist. Es scheint, als ob die einzige Aufgabe des Zwischenprozesses darin besteht, den Server von seinen Vorgängern zu „trennen“.

Ich denke, es könnte funktionieren, wenn tmuxder Server das unmittelbare Kind eines tmuxClients ist und erst dann eine PPID von 1 erhält, wenn der Client beendet wird. Beachten Sie, dass der Sinn darin besteht, tmuxeinen Server zu haben, der weiterläuft, nachdem der ursprüngliche Client getrennt wurde. Wenn der Server also das Kind eines Clients wäre, würde er früher oder später wahrscheinlich ohnehin verwaist sein. Und da der tmuxClient im Allgemeinen von jeder Shell oder einem anderen Prozess ausgeführt werden kann, der möglicherweise versucht, die Kinder seiner Kinder zu überwachen, ihnen Signale zu senden usw., ist es sinnvoll, den Server so schnell wie möglich zu verwaistem.

Der Server erhält also fast sofort eine PPID von 1. Jede Shell oder jeder andere Prozess, in dem Sie laufen, tmuxist ein Nachkomme des Servers. Nach dem (erneuten) Anschließen sehen Sie, was der Client Ihnen anzeigt. Der Client selbst ist ein Kind der Shell, in der Sie ihn aufgerufen haben (oder sshdwas auch immer). Er kommuniziert mit dem Server, übergibt ihm Tastenanschläge, erhält Informationen darüber, wie das Fenster aussehen soll, und druckt die Zeichen entsprechend.

Der Server läuft, sobald er gestartet ist, bis alle Sitzungen beendet sind. Das bedeutet, dass Sie, um ihn ordnungsgemäß zu beenden, alle Shells (oder andere Prozesse), die Panes sind, beenden müssen.

Diese Architektur erklärt, warum die Umgebung des zuerst aufgerufenen tmuxbeibehalten werden kann, die Umgebung der tmuxClients jedoch im Allgemeinen keine Rolle spielt. Der Server startet als Enkel des ersten tmux, sodass er die Umgebung erben kann. Danach hängt alles vom Server ab. Solange der Server läuft, gibt es keine direkte Vererbung von einem späteren Client, da weder der Server noch neu gestartete Prozesse (Bereiche) Nachkommen dieses Clients sind. Siehediese Antwort von mir.

verwandte Informationen