Frage Ist es möglich, einen Prozess von seinem Terminal zu trennen? (Oder: "Ich hätte Bildschirm benutzen sollen!") [Duplizieren]


Mögliche Duplikate:
Kann ich einen bereits gestarteten Prozess nohup / screenen? 

Unter Unix (speziell Linux) habe ich einen Job in einer regulären ssh-> bash-Sitzung gestartet. Ich möchte die Arbeit bald verlassen, aber mir ist jetzt klar, dass der Job mehrere Stunden dauern wird.

Wenn ich gerade diesen Job im Bildschirm gestartet hätte, könnte ich mich trennen und nach Hause gehen. Aber ich tat es nicht.

Gibt es eine Möglichkeit, den Job von seiner SSH-Sitzung zu trennen, so dass ich meinen Computer herunterfahren kann (die TCP-Verbindung fallen lassen und die SSH-Sitzung beenden), und trotzdem das Programm weiterlaufen lassen?

Ich kümmere mich nicht um seine Ausgabe - in der Tat habe ich stdout in eine Datei umgeleitet. Ich möchte nur, dass es bis zum Ende läuft.


116
2017-07-01 22:16


Ursprung




Antworten:


Sie können drücken ctrl-z um den Prozess zu unterbrechen und dann auszuführen bg um es im Hintergrund laufen zu lassen.

Sie können eine nummerierte Liste aller auf diese Weise hinterlegten Prozesse mit anzeigen jobs.

Dann kannst du rennen disown %1 (ersetzen 1 mit der Prozessnummer ausgegeben von jobs) um den Prozess vom Terminal zu trennen.

Trotz des Namens bleibt der Prozess nach dem Ausführen immer noch Ihr Eigentum disownEs wird nur von dem Terminal getrennt, in dem Sie es gestartet haben.

Diese Antwort enthält weitere Informationen


156
2017-07-01 22:26



Wie sicher ist es, dieses Verfahren auszuprobieren? Irgendwelche Fallstricke? - ndemou


Ich glaube, der Befehl, nach dem Sie suchen, ist "disown"


17
2017-08-19 16:32





Aus Ihrer Bash-Shell heraus:

control+z

Um den Job im Hintergrund weiter auszuführen, gehen Sie wie folgt vor:

bg

Später können Sie eingeben jobs  um zu sehen, ob Ihr Prozess noch läuft.


8
2017-07-01 22:23



Wird es nicht getötet, wenn ich meine Schale schließe? - mike
Nein. Zumindest nicht, wenn du einen Bash hast. Der Job trennt sich von der PPID Ihrer SSH-Sitzung und wird weiterhin auf dem Server als Ihr Benutzername ausgeführt. - Joe
Die obigen Anweisungen führen dazu, dass der Prozess beendet wird, wenn Sie die Shell schließen. Außerdem müssen Sie den Befehl 'disown' (in bash) ausführen, der den Prozess von der Shell trennt und das HUP-Signal nicht an den Prozess beim Beenden sendet. - Mark
Auf meiner Version von Bash [3.2.25 (1) -Release (i686-redhat-linux-gnu)] habe ich den Prozess getestet und musste den Job vor dem Trennen nicht abweisen. Die untergeordnete PID wurde von der übergeordneten PID getrennt und ohne Unterbrechung als Benutzername ausgeführt. YMMV, nehme ich an. - Joe


Beim Benutzen Reptyr Innerhalb des Bildschirms können Sie den Prozess (oder seine Ausgabe) in den Bildschirm verschieben.


5
2018-05-16 14:07





Benutzen
Nohup Befehl &

Ist schön:
root @ index: ~ # nohup / usr / bin / locken localhost / begemot.php &
[1] 894
root @ index: ~ # nohup: Eingabe ignorieren und Ausgabe an `nohup.out 'anhängen

und Ausgang dieses Terminals, eine Aufgabe wird fortgesetzt ...

5
2018-05-24 09:23





Mit crtl-Z dann bg oder mit & bei der Ausführung des Befehls ist nicht zuverlässig bei 100%. Es wird in den meisten Fällen funktionieren, aber möglicherweise nicht wie erwartet funktionieren (E / A-Verwendung, ...).
Bildschirm ist eine zuverlässige Lösung.


4
2017-07-01 22:34



Beachten Sie, dass Rotty (pasky.or.cz/~pasky/dev/retty) ist ein Werkzeug, mit dem Sie einen Prozess, der außerhalb des Bildschirms ausgeführt wird, in den Bildschirm verschieben können. Es kann nützlich sein, Ihre Arbeit in einen Bildschirm zu setzen, wenn Sie es vergessen haben. Dann können Sie den Bildschirm sicher abtrennen, ohne das Risiko einzugehen, dass der Job gestoppt wird. - radius


Ich habe mich aufgebaut screen automatisch ausführen, wenn ich mich mit Hosts verbinde, die ich regelmäßig verwende, um dieses Problem zu vermeiden.

http://tlug.dnho.net/?q=node/239 ist eine Möglichkeit, es zu tun, obwohl es andere Variationen gibt.

Hat mich ein oder zwei Mal gerettet, als ich mitten in der Sitzung eine unerwartete Trennung hatte und sonst vergessen hätte anzufangen screen bevor ich etwas langatmiges begann.


4
2017-07-01 22:50





Wenn Sie bash verwenden, können Sie mit control-Z und Hintergrund mit bg vermuten.

Jobkontrolle (von Mann bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

Hilfe bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the shell's notion of the current
    job is used.

Hilfe Jobs

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

3
2017-07-01 22:23



Wird es nicht getötet, wenn ich meinen Computer ausschalte und so die SSH-Sitzung durchbringe und die Shell töte? - mike
Warten Sie, führen Sie den Befehl auf Ihrem lokalen Computer und mit SSH für einige Eingabe / Ausgabe? Oder läuft das auf dem Remote-Computer? Wenn der Befehl auf dem Remote-Computer ausgeführt wird, sollten Sie in der Lage sein, Hintergrundinformationen anzuzeigen und die Verbindung zu trennen. - Zoredache


Wenn Sie im Voraus wissen, dass Sie im Hintergrund laufen möchten, verwenden Sie den Unix-Befehl beim ist eine gute Option. Es startet Befehle im Hintergrund zur geplanten Zeit, genau wie ein Cron-Job, der sich nicht wiederholt. Abhängig von Ihrer Distribution müssen Sie sie möglicherweise installieren und den ATD-Daemon starten.


2
2018-04-04 12:58