Ich habe ein laufendes Programm auf einer SSH-Shell. Ich möchte es anhalten und seine Ausführung fortsetzen können, wenn ich zurückkomme.
Eine Art, wie ich daran gedacht habe, war, seinen Besitz auf eine Bildschirm-Shell zu übertragen und ihn so dort laufen zu lassen.
Gibt es eine andere Vorgehensweise?
Akzeptierte Antwort:
Mit disown
können Sie dem Programm von der Shell aus den „Besitz“ entziehen eingebaut:
# press Ctrl+Z to suspend the program
bg
disown
Dies weist die Shell jedoch nur an, kein SIGHUP
zu senden Signal an das Programm, wenn die Shell beendet wird. Das Programm behält alle Verbindungen, die es mit dem Terminal hat, normalerweise als Standard-Eingabe-, Ausgabe- und Fehlerströme. Es gibt keine Möglichkeit, diese an ein anderes Terminal anzuschließen. (Screen funktioniert, indem es für jedes Fenster ein Terminal emuliert, sodass die Programme an das Bildschirmfenster angehängt werden.)
Es ist möglich, die Dateideskriptoren an eine andere Datei anzuhängen, indem Sie das Programm in einem Debugger anhängen (d. h. mit ptrace
) und es open
aufrufen lassen , dup
und close
. Es gibt ein paar Tools, die dies tun; Dies ist ein kniffliger Prozess, und manchmal stürzen sie den Prozess stattdessen ab. Zu den Möglichkeiten gehören (Links, die aus Antworten zu Wie kann ich einen laufenden Prozess verwerfen und ihn einer neuen Bildschirm-Shell zuordnen? und Kann ich einen bereits gestarteten Prozess nohup/screenen?):
- grab (und das ehrgeizigere Cryopid)
- neercs
- Weiterleitung
- Reptyrer
- Rettchen