it-swarm.com.de

Verschieben eines bereits laufenden Prozesses auf Bildschirm

Bei meinem Bürojob bin ich routinemäßig über VNC mit einer Linux-Box verbunden.

Manchmal starte ich einen Remote-Job auf der Konsole und stelle später fest, dass er viel länger als erwartet ausgeführt wird. (Sollte das überhaupt unter Bildschirm gestartet haben ...)

Ich möchte meine Workstation nicht über Nacht laufen lassen, nur um die VNC-Sitzung offen zu halten. Ich möchte diesen bereits ausgeführten Remote-Job in eine Bildschirmsitzung (auf der Remote-Box) verschieben, damit ich die Workstation ausschalten (und am nächsten Morgen erneut eine Verbindung herstellen) kann.

Wie kann das gemacht werden, wenn überhaupt?

232
DevSolar

Schauen Sie sich reptyr an, das genau das tut. Die Github-Seite enthält alle Informationen.

reptyr - Ein Tool zum "erneuten Binden" von Programmen.

reptyr ist ein Dienstprogramm zum Aufnehmen eines vorhandenen laufenden Programms und zum Anhängen an ein neues Terminal. Startete einen lang laufenden Prozess über ssh, muss aber gehen und möchte ihn nicht unterbrechen? Starten Sie einfach einen Bildschirm, greifen Sie mit Reptyr darauf, beenden Sie die SSH-Sitzung und fahren Sie nach Hause.

VERWENDUNGSZWECK

reptyr PID

"reptyr PID" erfasst den Prozess mit der ID PID und verbindet ihn mit Ihrem aktuellen Terminal.

Nach dem Anhängen nimmt der Prozess Eingaben von und schreibt Ausgaben in das neue Terminal, einschließlich ^ C und ^ Z. (Leider müssen Sie im Hintergrund immer noch "bg" oder "fg" im alten Terminal ausführen. Dies kann wahrscheinlich nicht auf vernünftige Weise behoben werden, ohne Ihre Shell zu patchen.)

229
DaveJohnston

Sie können dies nicht einfach tun. Ich würde vorschlagen, es sich zur Gewohnheit zu machen, den Bildschirm als erstes zu starten, nachdem Sie eine Konsole geöffnet haben.

Für Ihr eigentliches Problem können Sie jedoch noch etwas anderes versuchen: Nachdem Sie Ihren Job vom Terminal aus gestartet haben, können Sie ihn durch Eingabe von Strg-z und dann bg in den Hintergrund stellen. Trennen Sie danach den Job von der übergeordneten Shell. in bash würdest du disown -h %<jobid>. Danach können Sie das Terminal sicher schließen und der Job wird weiter ausgeführt.

46
earl

Wie steht es mit der Verwendung von Retty im neu gestarteten Bildschirmprozess, wenn Sie Linux verwenden?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

prost,

39
Rob Wells