30.042014

Linux: Laufende Prozesse in den Hintergrund schieben

Welcher Softwareentwickler kennt es nicht, kurz vor Feierabend noch "kurz" ein Command auf der Konsole absetzen und dann ab nach Hause.
Schon beim Druck auf "Enter" wird einem dann bewusst, dass man es doch lieber im Screen hätte starten sollen. Spätestens nach 30 Minuten ärgert man sich dann so sehr, dass man das Command abbricht und es im Screen neustartet ;)
Aber auch hierfür gibt es eine Lösung, ein kleines Tool namens reptyr. Mit reptyr kann man einen laufenden Prozess in einem anderen Terminal übernehmen.
Unter Debian und Ubuntu wird es einfach aus den Repos installiert

root@SERVER:~# apt-get install reptyr

Testen kann man das Ganze, indem man sich 2x per SSH auf einen Server verbindet und dann folgende Befehle ausführt:

root@SERVER:~# tail -f /var/log/syslog

Mit ps kann man nun die PID und das TTY sehen:

root@SERVER:~# ps aux |grep tail
root     23917  0.0  0.0   5916   616 pts/4    S+   10:27   0:00 tail -f /var/log/syslog

Hier kann man schön sehen, dass der tail Prozess (PID 23917) dem pts/4 gehört. Nun lässt man den tail weiter laufen, startet auf der zweiten Konsole den Screen und uebernimmt darin den Prozess mit reptyr:

root@SERVER:~# screen
root@SERVER:~# reptyr 23917

Zur Kontrolle nun wieder ein ps:

root@SERVER:~#ps aux |grep tail
root     23917  0.0  0.0   5916   668 pts/6    Ss+  10:27   0:00 tail -f /var/log/syslog

Hier sehen wir, dass der Prozess am pts/6 attached ist und man die Syslogmeldungen nicht mehr in der ersten Konsole sondern in der zweiten Konsole ausgegeben bekommt... Jetzt kann man den Screen in den Hintergrund schieben und endlich Feierabend machen ;-)