Prozess in screen session schieben

Wie bekommt man einen laufenden Prozess aus einer Bash in eine Screen Session? Das ist gar nicht so schwer und wird deshalb hier kurz beschrieben.Alles was man dazu braucht sind die folgenden Tools:

  • screen
  • disown (bereits in bash enthalten)
  • reptyr
  • pgrep (optional)

Beispiel

Es kann vorkommen, dass man seinen X-Server neu starten muss. Will man dabei etwa seinen IRC Client (Irssi) nicht beenden, ist das über eine screen session machbar. Typischerweise startet man irssi aber nicht in einer solchen Session, weshalb man den Prozess nun verschieben muss.

  1. Am Anfang muss man den zu verschiebenden Prozess suspenden.Das funktioniert typischerweise mit ctrl+z.
  2. Als nächstes schiebt man den Prozess in den Hintergrund:
    $ bg
  3. Jetzt wirds spannend. Als nächstes muss man den Prozess von parent „befreien“ (der shell). Das bewirkt, dass beim beenden der Shell irssi weiterläuft und nicht selbst beendet wird. Das erreicht man durch das in der Bash eingebaute disown Kommando:
    $ disown irssi
  4. Jetzt wird’s Zeit eine screen session zu starten:
    $ screen
  5. In der nun erstellten screen session „übernemen“ wir den Prozess und werden damit neuer parent.
    $ reptyr <pid>
  6. Um die pid nicht von Hand ermitteln zu müssen, kann pgrep verwendet werden:
    $ reptyr $(pgrep irssi)

Jetzt befindet sich irssi in einer screen session. Damit kann der X-Server beendet werden, ohne dass irssi ebenfalls beendet wird.

Zusammenfassung

$ ctrl+z                # Suspend the current process
$ disown irssi          # Detach irssi from the shell
$ screen                # Launch screen
$ reptyr $(pgrep irssi) # Get back the process

Schreibe einen Kommentar