Process in anderes Terminal verschieben

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Verschieben eines laufenden Prozesses in ein anderes Terminal

Ob bei der Fernwartung per SSH oder bei der Arbeit in X11, manchmal möchte man voreilig gestartete Prozesse nicht abbrechen. Die Tools SCREEN oder TMUX leisten hier gute Dienste, indem sie die Prozesse auch weiterlaufen lassen, wenn das Terminal versehentlich beendet wird.

Doch was tun, wenn man vergessen hat, screen aufzurufen? Am Liebsten möchte man den Process noch nachträglich in screen laufenlassen.

Hier kommt reptyr ins Spiel.

Vorbereitung

reptyr ist ein ausgereiftes Tool und sowohl für i386 als auch amd64 in debian main paketiert.

apt-get install reptyr  # am Besten nicht erst, wenn man es braucht.

Ab Ubuntu 10.10 muss man die ptrace_protection temporär deaktivieren.

echo 0 > /proc/sys/kernel/yama/ptrace_scope 

pgrep, screen, ssh werden nach persönlichen Vorlieben eingesetzt.

Anwendung

Prozesse mit Kind-Prozessen können nicht verschoben werden.

reptyr bemüht sich, den Prozess möglichst sauber in das neue Terminal einzubinden.

Ein kritischer Punkt sind zum Beispiel nachträgliche Größenänderungen des Fensters.

Die sicherste Anwendung erfolgt dabei in fünf Schritten:

[ctrl+z]                  # Prozess pausieren
$ bg                      # Prozess im Hintergrund weiterlaufen lassen
$ disown 'name'           # Prozess von der Shell abkoppeln

$ screen                  # ssh + screen, tmux oder anderes Terminal starten
$ reptyr $(pgrep 'name')  # Den Prozess ins aktuelle Terminal wieder in den Vordergrund holen

pgrep ermittelt hier die ProcessID (PID) anhand eines Prozessnamens.

Im Ergebnis läuft der Prozess so sauber, als ob er nie woanders gewesen wäre.

Have fun with reptyr
musca,2013/07/01