Kurztipp: Laufende Prozesse in andere Terminals verschieben
Das folgende Szenario ist vermutlich jedem Linux-Benutzer bekannt: ein laufender Prozess soll in ein anderes Terminal verschoben werden. Klassisches Beispiel - das längere Applikationsupdate soll unterwegs in einer GNU Screen-Sitzung verfolgt werden. Blöd, wenn man vorher nicht daran gedacht hat.
Glücklicherweise gibt es hier entsprechende Tools. Vor einigen Jahren habe ich mit retty ein solches Tool gefunden - leider war es nicht besonders stabil; so stürzten mir die zu verschiebenden Applikation häufig ab. Mehr Erfolg hatte ich mit dem Programm reptyr, welches bei vielen Linux-Distributionen zum Software-Umfang gehört (unter Enterprise Linux kann das Programm über das EPEL-Repository bezogen werden).
Um einen Prozess in eine GNU Screen-Sitzung zu verschieben, muss das Programm mit der Tastenkombination STRG+Z in den Hintergrund verschoben werden. Nach Eingabe von bg
wird der Prozess im Hintergrund fortgeführt.
1$ programm
2STRG+Z
3$ bg
Der nächste Schritt ist es, den Prozess vom aktuellen Terminal abzukoppeln, damit es an ein anderes Terminal angekoppelt werden kann. Genauer gesagt, wird der Job aus der Tabelle aktiver Jobs entfernt - hierzu dient das disown
-Kommando:
1$ disown %1
Anschließend wird GNU Screen gestartet und die entsprechende PID der Applikation gesucht - beispielsweise mit ps
oder pgrep
.
1$ screen
2$ pgrep programm
Abschließend wird die PID an reptyr
übergeben, um den Prozess in das neue Terminal zu verschieben:
1$ reptyr PID