(Läuft auf einem Ubuntu 10.04 64-Bit-Server)
Gestern habe ich den Fehler gemacht, einen Prozess über SSH zu starten (von dem ich nicht wusste, dass er mehrere Tage dauern würde), ohne den Bildschirm zu verwenden. Ich habe heute den ganzen Tag damit verbracht, herauszufinden, wie ich die Ausgabe des Prozesses aus dem Eisengriff von SSH herausholen kann, damit ich meinen Client-Computer neu starten kann, aber nicht weiterkomme.
Ich habe versucht, gdb zu verwenden und den Anweisungen am Ende dieser Seite zu folgen. Wenn ich jedoch den ersten gdb-Befehl zum Erstellen einer Datei ausführe, wird eine Fehlermeldung angezeigt, die besagt No symbol table is loaded. Use the "file" command.
, dass ich das Programm, dessen Ausgabe ich habe, neu kompilieren muss Ich versuche umzuleiten, was mir jetzt natürlich keine Hilfe ist, da es bereits läuft.
Ich dachte auch, ich könnte Retty verwenden, um die Ausgabe auf ein anderes Terminal umzuleiten, aber offensichtlich wird es auf 64-Bit-Plattformen nicht kompiliert.
Wie kann ich die Ausgabe dieses Prozesses auf ein anderes Terminal oder eine Datei umleiten?
call dup2()
Dann ist etwas schiefgegangen , es hätte die fd für "myprog.stdout" über fd 1 duplizieren sollen, anstatt eine neue fd 5 zu erstellen. Sie sollten dies immer noch beheben können, wenn Sie gdb undcall dup2(4,1)
und wiederholencall dup2(6,2)
. Hoffentlich stört die zusätzliche Kopie der geöffneten Datei nicht, aber probieren Siecall close(5)
die Ersatzkopie nicht an. Ich habe das gerade getestet und das Programm ist sofort fehlerfrei.Sie können nichts aus der Ferne tun. Melden Sie sich mit ssh und demselben Konto beim anderen Server an, mit dem der Prozess gestartet wurde. Sie können den Prozess von der neuen Sitzung aus steuern.
quelle
Sie können reredirect verwenden ( https://github.com/jerome-pouiller/reredirect/ ).
Art
und Ausgaben (Standard und Fehler) werden in FILE geschrieben.
reredirect README erklärt auch, wie der ursprüngliche Prozessstatus wiederhergestellt, wie zu einem anderen Befehl umgeleitet oder nur stdout oder stderr umgeleitet werden.
quelle