Ich führe einige Testläufe von Datenmigrationsskripten mit langer Laufzeit über SSH durch. Angenommen, ich beginne gegen 16 Uhr mit der Ausführung eines Skripts. jetzt rollt 18 uhr herum und ich verfluche mich dafür, dass ich das nicht alles mache screen
.
Gibt es eine Möglichkeit, nohup
einen Vorgang "rückwirkend" durchzuführen, oder muss ich meinen Computer die ganze Nacht online lassen? Wenn es nicht möglich ist, einen Prozess anzuhängen screen
, den nohup
ich bereits gestartet habe, warum dann? Hat das etwas mit der Interaktion zwischen Eltern und Kind zu tun? (Ich akzeptiere keine "Nein" -Antwort, die zumindest die Frage nach dem "Warum" nicht beantwortet - sorry;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theAntworten:
Wenn Sie Bash verwenden, können Sie ausführen
disown -h job
quelle
disown %1
wenn 1 die Jobspezifikation ist, im Gegensatz zu fg oder bg, wo Sie nurbg 1
serverwatch.com/tutorials/article.php/3935306/…Verwenden Sie Reptyr
Aus der README:
Ein paar Blogbeiträge des Autors:
quelle
Um einen Prozess von einem bis zu Ihrem aktuellen Tty zu stehlen, können Sie diesen Hack ausprobieren:
http://www.ucc.asn.au/~dagobah/things/grab.c
Es muss neu formatiert werden, um auf die aktuellen Linux / glibc-Versionen zu kompilieren, funktioniert aber immer noch.
quelle
Wenn ein Prozess gestartet wird, sind STDIN, STDOUT und STDERR mit etwas verbunden . Im Allgemeinen können Sie dies nicht mehr ändern, sobald der Befehl gestartet wurde. In dem Fall, den Sie beschreiben, handelt es sich wahrscheinlich um eine Tty, die mit der SSH-Sitzung verknüpft ist. nohup macht so ziemlich einfach ...
Das heißt, setzt STDIN auf / dev / null, STDOUT auf eine Datei und STDERR auf STDOUT. Screen erledigt viel anspruchsvollere Dinge, indem es Ttys einrichtet, die direkt zu sich selbst führen.
Ich kenne keine Möglichkeit, einen laufenden Prozess rückwirkend zu überprüfen oder zu überprüfen. Wenn Sie nach / proc / $ pid / fd cden und sehen, auf was 0, 1 und 2 zeigen.
Sie haben vielleicht etwas Glück mit Disown, aber nicht, wenn der Prozess versucht, etwas mit STDIN, STDOUT oder STDERR zu tun.
quelle
Cryopid ist eine Weiterentwicklung des Autors von grab.c, die einen Prozess in einer Datei einfriert, die Sie dann ausführen (innerhalb des Bildschirms), um den Prozess fortzusetzen.
quelle
Ich kann dir nur ein einfaches "Nein" geben, ohne das Warum für den Bildschirmteil, ich würde mich für den Grund interessieren, den du selbst hast.
Wie auch immer, hast du es versucht
disown
(ein bash builtin)quelle
nohup unter Solaris / OpenSolaris verfügt über das Flag -p, mit dem ein ausgeführter Prozess nicht aktualisiert werden kann .
quelle
Ich habe kürzlich einen Link zu neercs gesehen , einem bildschirmähnlichen Dienstprogramm, das mit libcaca, einer Farb-ASCII-Kunstbibliothek, erstellt wurde. Unter anderem bietet es die Möglichkeit, einen vorhandenen Prozess zu erfassen und ihn in Ihrer neercs-Sitzung (Bildschirmsitzung) erneut zu erben.
Ich habe es jedoch nicht benutzt und kann daher nicht beurteilen, ob es funktioniert oder nicht.
quelle
Ich bin wahrscheinlich der Meinung, dass dies so ist, dass ich mich frei fühlen kann, es zu korrigieren (ich habe bereits etwas über Verleugnung gelernt!). Oder ist das Hauptproblem, bei dem Sie STDOUT immer noch sehen möchten, während es ausgeführt wird?
quelle
Wenn Sie damit leben können, dass Sie nicht in der Lage sind, mit dem Prozess zu interagieren, und keine Einwände gegen das Laden zufälliger Kernelmodule haben, können Sie es schlechter machen, als sich Snoop anzuschauen . Alternativ gibt es einige andere Projekte. Hier ist ein Aufruf von injcode, der meistens das tun kann, was Sie tun möchten.
quelle
Sie können die Prozessausgabe mit gdb in eine Datei umleiten
https://blog-en.openalfa.com/wie- man- vom-terminal-a-running-process-in-linux-entfernt
und dann verleugnen
Update: Ich musste gdb mit sudo und etwas anderem gdb Befehl in Ubuntu 18.04 ausführen:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
quelle
Ich wollte
nohup
(oder ähnliches) verwenden, um das zu startenlinks
Befehlszeilenbrowser und ihn anschließend anzufügen, um eine Datei von der ASP.NET-Website mit einem komplizierten Authentifizierungsprozess und vielen Statusangaben für verborgene Ansichten herunterzuladen, die es schwierig machten, die Aufgabe zu erledigen mitcurl
/wget
.Ich habe es schließlich benutzt
tmux
was die Aufgabe einfach toll gelöst hat:tmux
links
in meinem Fall) und lassen Sie sie laufentmux attach
, um die App wieder auf den Bildschirm zu bringenquelle
Sind Sie besorgt über das Zeitlimit für die Sitzung? In diesem Fall können Sie den Prozess mit Strg-Z und BG ausführen und dann etwas einfügen, um die Sitzung am Leben zu erhalten, wie z. B. einen "ping -t localhost" oder "top".
Wenn Sie sich abmelden möchten, kann ich leider keine weiteren Kommentare hinzufügen.
quelle