
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
tmux
läuft in einer Client-Server-Architektur. Wenn Sie tmux
von einer Shell aus ausführen, führen Sie einen Client aus, der ein untergeordnetes Element der Shell ist. (Es ist möglich, tmux
von einer anderen Shell aus auszuführen, z. B. direkt von sshd
, dieses Detail ändert nichts).
tmux
Der 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 tmux
Clients besteht darin, mit dem Server zu kommunizieren und den Server dazu zu veranlassen, etwas zu tun.
Wenn tmux
ein Server gestartet werden muss, tut er clone(2)
das selbst. Der resultierende untergeordnete Prozess clone
wird sofort wieder gestartet und dann beendet. Der neueste Prozess wird zum eigentlichen tmux
Server 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 tmux
der Server das unmittelbare Kind eines tmux
Clients ist und erst dann eine PPID von 1 erhält, wenn der Client beendet wird. Beachten Sie, dass der Sinn darin besteht, tmux
einen 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 tmux
Client 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, tmux
ist 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 sshd
was 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 tmux
beibehalten werden kann, die Umgebung der tmux
Clients 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.