Wenn Ihre Aufgabe ist bereits ins Leben gerufen, ist es zu spät ist , *
alternative Lösungen zu berücksichtigen , dass Einsatz eine zusätzliche Schicht zwischen Ihrer ssh
Sitzung und dem Shell den Befehl ausführen, wie screen
, tmux
, byobu
, nohup
und Ähnliches.
Wenn Ihr Prozessunterstützung im Hintergrund platziert werden und vor allem nicht hängen , wenn stdout
und stderr
sind nicht beschreibbar / geschlossen, können Sie es in den Hintergrund gestellt , bevor sie mit sich abzumelden ControlZund bg
dann trennen sie von der Shell mit dem disown
builtin.
z.B:
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Wie Bob bemerkte, gibt es tatsächlich mehrere hackige Möglichkeiten, eine tty-Sitzung unter Linux zu reparieren. leer, retty , injcode und neercs . Die am weitesten fortgeschrittene Version ist Reptyr, aber Sie benötigen möglicherweise Root-Rechte, damit ptrace Ihren Prozess hacken kann.
disown
Befehl ausgeführt. Es gab zurück: Bash: Warnung: Löschen von gestopptem Job 1 mit Prozessgruppe 24876. Jetzt ist mein Job in aufgeführtps -all
, scheint aber nicht zu funktionieren (CPU-Auslastung ist 0%)disown
Befehlbg
Befehl im ersten Teil meiner Antwort erforderlich war. Bearbeitetkill -CONT
ungefähr dasselbe tut wie bg.Eine Lösung ist die Verwendung des GNU-Bildschirms . Sie könnten starten
screen
, Ihren Befehl ausführen und dann mit trennenC-a d
. Wennscreen -r
Sie später erneut eine Verbindung herstellen möchten, kehren Sie zu Ihrer vorherigen Sitzung zurück.Weitere Vorteile des Bildschirms sind die Fensterverwaltung (so dass Sie während der Ausführung Ihres Befehls zu anderen Shells wechseln können, ohne eine neue SSH-Verbindung zu benötigen) und Ihr Befehl in der aktuellen oder einer späteren Sitzung im Vordergrund bleiben kann.
Bearbeiten: Wie in den Kommentaren erwähnt, funktioniert dies nur, wenn Sie daran denken,
screen
vor dem Ausführen des Befehls zu starten . Wenn der Befehl bereits ausgeführt wird, benötigen Sie die Lösung von @ jlliagre.quelle
tmux
ist ein anderes Programmscreen
, mit dem Sie eine Remote-Sitzung haben können, die nicht an Ihre aktuelle SSH-Verbindung gebunden ist.screen
.screen
oder zu verbindentmux
.)Eine der "Standard" -Möglichkeiten ist die Verwendung des
nohup
Befehls, der in der folgenden Form enthalten istcoreutils
:Aber der Befehl leitet die Ausgabe (
STDOUT
&STDERR
AFAIK) des Programms in eine Datei umnohup.out
, was manchmal ärgerlich ist (wie das Generieren einer riesigen Protokolldatei). Vielleicht möchten Sie Ihre eigene Umleitung vornehmen oder sie nach / dev / null umleiten falls Sie es wollen.quelle
nohup
kann dafür verwendet werden. Unterbrechen Sie einfach den laufenden Prozess und senden Sie ihn an den Hintergrund (Ctrl
+Z
und führenbg
Sie ihn aus)nohup %1
.Zusätzlich
nohup
können Sie den Prozess mit "&" und Subshell im Hintergrund starten:Suffixieren Sie den Befehl mit & und setzen Sie ihn in Klammern
Nehmen wir an, Ihr Prozess erhält die PID 1922:
Schauen Sie, dass es nicht mit dem Shell-Prozess 11473 verbunden ist, der das ursprüngliche übergeordnete Element war. Wenn Sie also die aktuelle Shell beenden oder beenden (11473), läuft der Prozess 11922 weiter und wird von den PTS getrennt.
Versuchen Sie, die Shell zu verlassen und eine neue Shell einzugeben. Auch wenn diese Shell mit denselben Punkten verbunden ist, können Sie den Vorgang jetzt ohne Punkte sehen:
Ich weiß nicht, wie es in Posix heißt oder dokumentiert ist, aber ich benutze es seit 1990 in bsh, ksh und jetzt in bash.
Zuletzt können Sie den
bg
eingebauten Shell-Befehl verwenden:Starten Sie einfach Ihr Programm und geben Sie STRG + Z ein, wenn Sie es anhalten oder im Hintergrund behalten möchten:
Lass es nun weiter im Hintergrund laufen:
Wenn Sie sich die Prozessinfos ansehen, gibt es noch einen übergeordneten Prozess:
Verlassen Sie also den aktuellen Prozess. Der im Hintergrund ausgeführte Prozess ist nicht mit dem ursprünglichen übergeordneten Prozess verbunden und wird im Hintergrund ausgeführt:
Melden Sie sich erneut an und sehen Sie sich die Prozessinformationen an:
quelle