SSH beenden und trotzdem einen Befehl ausführen?

SSH beenden und trotzdem einen Befehl ausführen?

Ich führe einen Befehl auf einem Server aus. Er wird mit dieser Bibliothek gelieferthttp://www.graphicsmagick.org/.

Im Grunde habe ich eine For-Schleife, die eine Bildverarbeitung für viele Dateien durchführt.

Der Befehl läuft stundenlang und wird stundenlang laufen. Ich frage mich, ob ich SSH beenden kann und diese Befehle trotzdem auf dem Remote-Computer laufen. Wird beim Beenden von SSH ein Signal gesendet, um die aktuelle Befehlsausführung zu beenden?

Das andere, was mir aufgefallen ist: Obwohl ich den Befehl remote ausführe, überhitzt mein Laptop. Der Aktivitätsmonitor zeigt, dass Bash 70 % der CPU nutzt. Ich bin auf einem MacBook Pro

Das ist jetzt seltsam. Wie kann ein Remote-Befehl den lokalen Rechner belasten?

Antwort1

Eine Lösung besteht darin, dem Befehl ein Präfix zuzuweisen nohup. Dadurch wird der Computer angewiesen, „Auflege“-Signale (wie das Beenden einer SSH-Sitzung) zu ignorieren. Dies FUNKTIONIERT MÖGLICHERWEISE NICHT bei forSchleifen.

Eine weitere gute Lösung (und meine persönliche Lieblingsmethode hierfür) ist die Installation des Pakets „screen“. screenEs stellt ein virtuelles Terminal bereit, dessen Verbindung durch Drücken von getrennt werden kann, während Prozesse weiter ausgeführt werden CTRL + A , D. Die Verbindung zum Bildschirm kann später mit wiederhergestellt werden screen -r.

Antwort2

Wenn ein Sitzungsleiter mit zugehörigem Steuerterminal ( bashin Ihrem Fall) beendet wird, sendet das Betriebssystem SIGHUP an alle Prozesse in der Vordergrundprozessgruppe (Vordergrundjob). Zusätzlich bashsendet es standardmäßig das SIGHUP an alle seine Jobs, ob laufend oder gestoppt (gestoppte Jobs erhalten auch SIGCONT). Jetzt ist die Standardaktion beim Empfang von SIGHUP die Beendigung des Prozesses.

Es gibt mehrere Ansätze, um den Prozess nach bashdem Beenden weiterlaufen zu lassen. Erstens können Sie Ihren Prozess gegen SIGHUP immun machen; das nohupmacht der Befehl. Zweitens können Sie die entsprechende Prozessgruppe in den Hintergrund stellen und anweisen, bashkein SIGHUP an sie zu senden; dafür disownwird das integrierte Shell-Element verwendet (beachten Sie auch, dass es eine huponexitShell-Option gibt, die bewirkt, dass SIGHUP an alle Jobs gesendet wird, wenn eine interaktive Login-Shell beendet wird).

Wenn Sie nach der erneuten Anmeldung ein Terminal wieder an die Prozessgruppe anhängen möchten, sollten Sie einen Wrapper verwenden, der hierzu in der Lage ist. Terminal-Multiplexer wie dieser screenverfügen über diese Funktionalität.

verwandte Informationen