manchmal starte ich eine app im gnome-terminal, aber dann muss ich plötzlich gnome neu starten oder so. Ich denke, die Antwort auf die Frage ist auch nützlich, wenn ich mich von SSH trennen möchte, wo etwas passiert.
Der Terminalbaum von Gnome sieht folgendermaßen aus:
gnome-terminal
bash
some-boring-process
Can I ‚detach‘ bash
aus gnome-terminal
(oder detach some-boring-process
von bash und leitet seine Ausgabe irgendwo)? Wenn ich nur töte gnome-terminal
, bash
werden alle seine Unterprozesse getötet
Antworten:
Wenn
some-boring-process
in Ihrer aktuellen Bash-Sitzung ausgeführt wird:ctrl-z
an, um dir die Bash-Eingabeaufforderung zu gebenbg
jobs
Befehldisown -h %1
(ersetzen Sie die tatsächliche Jobnummer dort).Damit wird die Ausgabe nicht umgeleitet - das müssen Sie berücksichtigen, wenn Sie Ihren langweiligen Prozess starten. [Bearbeiten] Es scheint eine Möglichkeit zu geben, diese umzuleiten: https://gist.github.com/782263
Aber im Ernst, schauen Sie in den Bildschirm. Ich habe Muscheln auf einem Remote-Server, die seit Monaten ausgeführt werden.
quelle
screen
manchmal, obwohl es seine Probleme hat und ich möchte es nicht für jede Bash-Sitzung in meinem Leben verwendenbash: bg: current: no such job
?Genau dafür wurden screen und tmux erstellt. Sie führen die Shell in der screen / tmux-Sitzung aus und können die Verbindung nach Belieben trennen / wiederherstellen. Sie können auch mehrere Shell-Sitzungen in einem Gnome-Terminal ausführen.
quelle
screen
hat seine Probleme und ich habe keine Lust, es für jede Bash-Sitzung in meinem Leben zu verwendenscreen
,,tmux
oderdtach
(möglicherweise mitdvtm
) sind alle großartig dafür, aber wenn es etwas ist, bei dem Sie nicht daran gedacht haben, eines davon zu verwenden, können Sie es möglicherweise nutzennohup
.quelle
screen
hat seine Probleme und ich habe keine Lust, es für jede Bash-Sitzung in meinem Leben zu verwendennohup
funktioniert die Ausführung eines Prozesses mithilfe der-p
Option (falls verfügbar).-p
Optionnohup
in den Manpages sehen. Auf welchem System bist du?tmux
, habe ich die-p
Option auf einer Solaris-Box verwendet. Ich habe auch vage Erinnerungen daran, wie ich es auf einer CentOS-Box mit Mischlingen gemachtzsh
habe.bash
nochzsh
auf meinem Linux-System bietennohup
.Wenn Sie weiterhin mit dem untergeordneten Prozess interagieren möchten, anstatt ihn lediglich zu untermalen und am Laufen zu halten, gibt es ein Programm namens retty, das als Proof-of-Concept- Methode dient, um einen Prozess aus seiner aktuellen Tty zu "stehlen" und ihn erneut mit der Tty zu verknüpfen der Momentane.
Es führt jedoch einige schreckliche Dinge aus, darunter das Aufkleben von Assembly-Code auf den Stapel der neu angefügten Anwendung. Und dieser Code wurde für x86_64 nicht aktualisiert.
Es gibt ein anderes Programm, das einen vielleicht besseren Ansatz verfolgt und den Prozess im User-Space auf eine Datei beschränkt, aus der er später wiederhergestellt werden kann (möglicherweise auf einem anderen Tty). Dies ist Cryopid , und auch dieses Projekt scheint in der angehalten zu haben Proof-of-Concept-Phase und funktioniert unter modernem Linux im aktuellen Code nicht. Ah, gut.
Ich dachte nur, dies sollte der Vollständigkeit halber hier sein. Wenn es Ihnen nichts ausmacht, auf schreckliches Voodoo zurückzugreifen, liegt dies im Bereich der Möglichkeit - zumindest der theoretischen Möglichkeit.
quelle
Wenn ich etwas auslöse, das ich zu Ende bringen möchte (kurz vor dem Neustart des Systems), verwende ich es
nohup
und starte es im Hintergrund. Im Gegensatz zu Bildschirm und dergleichen können Sie die Prozesse nicht erneut zuordnen. Wenn Sie die Umleitung jedoch an einer anderen Stelle sperren, finden Sie alle Ausgaben innohup.out
.Ich benutze,
screen
wenn ich in der Lage sein möchte, Terminals für einen Prozess zu wechseln. B. einen Prozess von zu Hause / von der Arbeit aus zu starten und zum anderen zu wechseln. Wie bei jeder anderen Ausgabe einer Terminalsitzung wird der Bildlauf eventuell vom oberen Rand des Puffers ausgeführt.BEARBEITEN: Wenn Sie den Prozess bereits gestartet haben, können Sie
disown
den Prozess so einstellen, dass dasHUP
Signal nicht gesendet wird, wenn der Prozess geschlossen wird.quelle
screen
hat seine Probleme und ich habe keine Lust, es für jede Bash-Sitzung in meinem Leben zu verwendenSie können festlegen, dass ein Prozess (PID) nach Beendigung der Terminalsitzung kein HUP-Signal empfängt. Verwenden Sie den folgenden Befehl:
quelle
nohup: invalid option -- 'p'
. Welche Version vonnohup
laufen Sie auf welcher Art von System?-p
unter Linux gibt es keine Option. Diese Antwort ist Solaris- und AIX-spezifisch. Gut zu wissenDieses Skript trennt den untergeordneten Prozess vom übergeordneten Prozess und weist ihn dem Init- Prozess zu:
quelle