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 for
Schleifen.
Eine weitere gute Lösung (und meine persönliche Lieblingsmethode hierfür) ist die Installation des Pakets „screen“. screen
Es 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 ( bash
in Ihrem Fall) beendet wird, sendet das Betriebssystem SIGHUP an alle Prozesse in der Vordergrundprozessgruppe (Vordergrundjob). Zusätzlich bash
sendet 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 bash
dem Beenden weiterlaufen zu lassen. Erstens können Sie Ihren Prozess gegen SIGHUP immun machen; das nohup
macht der Befehl. Zweitens können Sie die entsprechende Prozessgruppe in den Hintergrund stellen und anweisen, bash
kein SIGHUP an sie zu senden; dafür disown
wird das integrierte Shell-Element verwendet (beachten Sie auch, dass es eine huponexit
Shell-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 screen
verfügen über diese Funktionalität.