In Linux kann es bei der Ausführung eines Prozesses, der eine lange Ausführungszeit erfordert, schmerzhaft sein, ihn auf halbem Wege zu beenden, weil Sie keine Zeit mehr haben oder weil Sie nach Hause müssen. Wenn Sie schon einmal eine solche Situation erlebt haben, dann müssen Sie das Repyr-Tool wirklich bekommen.

Was ist Repyr?

Das Repyr-Tool ist ein Befehlszeilendienstprogramm, das einen laufenden Prozess von einem Terminal übernimmt und in ein anderes migriert. Mit anderen Worten, es wiederholt einen Prozess. Der Name erinnert auch an ein Pseudoterminal - oft abgekürzt als "PTY". Ein Pseudoterminal ist ein Werkzeug, das zwei Prozesse (Master und Slave) miteinander verknüpft. Was du auf einem schreibst, spiegelt sich in dem anderen wider.

Wie funktioniert Repyryr?

Mit Reptyr können Sie einen Prozess bei der Arbeit starten und zu Hause beenden (wenn Sie SSH verwenden). Es gibt andere Tools, die dem Tool Repryr ähnlich sind, wie Screenify und Retty, und Sie haben sie möglicherweise schon einmal gesehen. Reptry hat sich jedoch im Moment als besser als seine Konkurrenten erwiesen. Es hat weniger Fehler und ist viel effizienter. Das Problem mit diesen anderen Tools besteht darin, dass das Steuerungsterminal des Prozesses selbst dann nicht geändert wird, wenn der Prozess migriert wird. Wenn Sie beispielsweise die Option "Überprüfen" verwenden und versuchen, die Befehle "^ c" oder "^ z" auf dem neuen Terminal zu verwenden, funktionieren sie nicht ordnungsgemäß. Dies liegt daran, dass sie auf dem Terminal ausgeführt werden, auf dem sich das Steuerelement gerade befindet. Wenn Sie die Größe eines Programmfensters ändern oder den " less " -Befehl ausführen, funktioniert es auch nicht richtig, da Linux davon überzeugt ist, dass Sie immer noch auf dem alten Terminal arbeiten.

Wie funktioniert Repyrr genau? Es zielt auf den Prozess ab, den wir mithilfe der ptrace-API migrieren möchten, öffnet ein neues Terminal und verwendet "dup2", um die alten Dateideskriptoren zu überschreiben. Reptyr unterscheidet sich auch dadurch von anderen Prozessen, dass es das Controlling-Terminal ändert. Sie können den offiziellen Blog überprüfen, um die Details zu erhalten, aber es beinhaltet im Grunde die Manipulation der ioctl, TIOCSCTTY-Funktion in Linux, um den Controlling-Prozess zu ändern.

Installation

In einer Ubuntu-basierten Distribution können Sie apt-get verwenden, um die Anwendung zu installieren:

 sudo apt-get installieren reptyr 

Verschieben eines Prozesses auf einen neuen Bildschirm mit Reptyr

Sie können Repyrr auch zusammen mit der Softwareanwendung GNU Screen (oder einer ähnlichen Terminal-Multiplexer-Anwendung) verwenden, um Ihren Prozess auf eine neue Bildschirmsitzung zu verschieben. Wenn Sie beispielsweise einen laufenden Prozess haben und Ihren Server neu starten müssen, können Sie ihn auf eine neue Bildschirmsitzung übertragen, sodass Sie nach einem Systemneustart erneut darauf zugreifen können. Klingt nützlich, oder? Wie machst du das genau?

Zuerst müssen Sie den Prozess, den Sie migrieren müssen, anhalten. Das kann auf verschiedene Arten geschehen - es hängt alles von dem Prozess ab, den Sie ausführen (meistens funktioniert "^ z"). Nachdem Sie es deaktiviert haben, müssen Sie den Prozess im Hintergrund fortsetzen. Der Befehl dafür ist, du wusstest nicht, ist,

 bg 

Als Nächstes müssen Sie den untergeordneten Prozess vom übergeordneten Prozess isolieren. Dies liegt daran, dass der übergeordnete Prozess während des Neustarts beendet wird, und Sie müssen verhindern, dass dies beim untergeordneten Prozess geschieht. Verwenden Sie dazu den Befehl disown:

 name_of_process verwerfen 

Dann müssen Sie die Bildschirmsoftware starten. Es ist eigentlich ein ziemlich praktisches Werkzeug - es ist einfach herunterzuladen, wenn Sie es nicht haben. Sie starten es mit dem folgenden Befehl:

 Bildschirm 

Und jetzt müssen Sie den Prozess abrufen, den Sie migrieren möchten. Bitte beachten Sie, dass Sie für diesen Befehl die PID des laufenden Prozesses benötigen. Alternativ können Sie den Befehl " pgrep " verwenden. Wenn Sie die PID kennen, geben Sie Folgendes ein:

 Reptyr PID 

Wenn Sie die PID nicht kennen:

 reptyr $ (pgrep name_of_process) 

Und du bist fertig! Sie können sich jetzt von Ihrer Sitzung abmelden, ohne den Prozess zu beenden.

Rekapitulieren

 $ ctrl + z # Unterbricht den aktuellen Prozess $ disown  # Trennen Sie den Prozess von der Shell $ screen # Starten Sie den Bildschirm $ reptyr $ (pgrep irssi) # Holen Sie den Prozess zurück 

Reptyr ist Open Source und völlig kostenlos. Es ist einfach zu installieren und zu benutzen, also mach weiter und probiere es aus. Ich bin sicher, Sie werden es ziemlich praktisch finden.

Bildnachweis: Techiezone, Mtellin @ Flickr