Wie kann ich die ssh-Sitzung trennen, ohne einen laufenden Prozess zu beenden?

2577
xcorat

Ich habe mit ssh auf einem Server eine Größenänderung des Testdateisystems gestartet, aber völlig vergessen, dies in einer screenSitzung auszuführen. Jetzt läuft es und mein Laptop hat ein sehr langsames Internet. Gibt es eine Möglichkeit, dass ich es laufen lassen kann, wenn ich die SSH-Verbindung löste?

Es bringt auch Fortschritte hervor, aber ich muss mich nicht darum kümmern.

OS: RHEL7.2-Äquivalent (SL7).

Es ist wahrscheinlich besser, dies als Lösung zu verknüpfen: https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

Ich weiß nicht, wie ich das verknüpfen soll, anstelle des vorgeschlagenen, also fügen Sie es hinzu und markieren Sie es als Duplikat

4
Mögliches Duplikat von [Wie halte ich Jobs nach dem Abmelden aufrecht?] (Https://superuser.com/questions/190827/how-do-i-keep-jobs-running-after-logout) JakeGould vor 6 Jahren 1

3 Antworten auf die Frage

4
Kamil Maciorowski

Dies ist genau der Fall, der man 1 reptyrausdrücklich erwähnt wird:

reptyrist ein Dienstprogramm, um ein vorhandenes laufendes Programm zu nehmen und an ein neues Terminal anzuschließen. Einen lang andauernden Prozess über ssh gestartet, müssen aber gehen und wollen ihn nicht unterbrechen? Starten Sie einfach ein screen, verwenden Sie reptyres, und beenden Sie die SSH-Sitzung, und fahren Sie nach Hause.

Verpassen Sie nicht diese Notiz:

reptyrhängt vom ptrace(2)Systemaufruf ab, der mit dem Remote-Programm verbunden werden soll. Bei Ubuntu Maverick und höher ist diese Funktion aus Sicherheitsgründen standardmäßig deaktiviert. Sie können es vorübergehend aktivieren, indem Sie tun

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

als root oder durch Bearbeiten der Datei /etc/sysctl.d/10-ptrace.conf, die auch weitere Informationen zu dieser Einstellung enthält.

Beachten Sie auch, dass reptyrein Prozess nur an ein anderes Terminal angehängt wird. Dies bedeutet nicht, dass der Prozess ein Kind der neuen Shell wird.

Die grundlegende Verwendung ist einfach:

reptyr PID 

Wo PIDist die PID des Prozesses, den Sie an ein neues Terminal anschließen möchten.

4
apocalysque

Benutzen

Ctrl-Z 

um die Anwendung anzuhalten und zur Befehlszeile zurückzukehren. Dann benutze

bg 

Damit der Prozess im Hintergrund fortgesetzt werden kann. Schließlich verwenden

disown 

Damit der Prozess nicht beendet wird, wenn Sie Ihre Sitzung trennen und Ihr Terminal schließen.

Der Prozess wird weiter ausgeführt, aber es gibt keine Möglichkeit, das Terminal erneut anzuschließen, um die Ausgabe anzuzeigen, die mir bekannt ist, wenn Sie sich erneut mit einer neuen Sitzung verbinden.

2
thrig

Sie können einen Befehl (in bashoder zshmöglicherweise andere Shells) vollständig von dem Befehl trennen disown. Der Befehl kann jedoch nicht glücklich darüber sein, wenn er eine tty erfordert. In diesem Fall sehen Sie die reptyrAntwort.

$ ssh somecentos7system -bash-4.2$ sleep 252727 ^Z [1]+ Stopped sleep 252727 -bash-4.2$ bg [1]+ sleep 252727 & -bash-4.2$ disown -bash-4.2$ logout Connection to somecentos7system closed. $ ssh somecentos7system -bash-4.2$ pgrep -lf 252727 20089 sleep -bash-4.2$  

Eine weitere Option besteht darin, eine Bildschirm- (oder Tmux-) Sitzung automatisch zu starten, sodass Sie nicht vergessen können, eine Sitzung zu starten, da für Sie bereits eine gestartet wurde, da Sie die Einstellungen auf diese Weise einrichten. Es gibt noch andere Beiträge, wie man das macht.