Ist es möglich, ein Terminal an einen bereits laufenden Prozess anzuhängen, indem seine PID auf ähnliche Weise wie der fg
Befehl für Jobs verwendet wird?
Ist es möglich, ein Terminal an einen bereits laufenden Prozess anzuhängen, indem seine PID auf ähnliche Weise wie der fg
Befehl für Jobs verwendet wird?
Antworten:
Sie können die Standard-Dateideskriptoren dieses Prozesses abrufen, z stdout
.
tail -f /proc/<pid>/fd/1
# ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Hier gibt es einige Möglichkeiten. Eine besteht darin, die Ausgabe des Befehls in eine Datei umzuleiten und dann zu verwendentail
neue Zeilen anzuzeigen, die dieser Datei in Echtzeit hinzugefügt werden.
Eine andere Möglichkeit besteht darin, Ihr Programm innerhalb von zu starten screen
, einer Art textbasierter Terminal-Anwendung. Bildschirmsitzungen können angefügt und getrennt werden, sind jedoch grundsätzlich nur für den gleichen Benutzer gedacht, wenn Sie sie also für mehrere Benutzer freigeben möchten.
Wenn Sie möchten, können Sie den Prozess auch nachverfolgen und sehen, wie er abläuft strace
:
strace -e trace=open -p 22254 -s 80 -o output.txt
-p PID
: Fügen Sie dem Prozess die Prozess-ID PID hinzu und beginnen Sie mit der Ablaufverfolgung.-s SIZE
: Geben Sie die maximale zu druckende Zeichenfolge an (die Standardeinstellung ist 32).-o filename
: Schreibe die Trace-Ausgabe in die Datei filename anstatt auf screen (stderr).sudo
mit strace eine Verknüpfung zu einem Prozess herstellen und verwenden, -o ~/output.txt
damit die Datei in Ihrem Basisordner verbleibt .
Mit den folgenden Befehlen können Sie einen laufenden Prozess an ein anderes Terminal anhängen:
retty
(Manpage: retty )reptyr
screen
Beispiel:
screen -S PID
retty $(pgrep PID)
reptyr PID
sudo apt-get install retty
aber mit retty gibt es nur wenige Einschränkungen. Schauen Sie sich die in der Antwort erwähnte Manpage an.