Ich denke, ich habe hier eine einfachere Lösung. Suchen Sie einfach unter dem unter /proc
erreichbaren Pseudo-Dateisystem nach einem Verzeichnis, dessen Name der gesuchten PID entspricht Weg. Wenn Sie also ein Programm ausführen, dessen ID 1199 ist, cd
hinein:
$ cd /proc/1199
Suchen Sie dann nach fd
Verzeichnis darunter
$ cd fd
Diese fd
Verzeichnis enthalten die Dateideskriptoren-Objekte, die Ihr Programm verwendet (0:stdin, 1:stdout, 2:stderr) und nur tail -f
die, die Sie brauchen - in diesem Fall stdout):
$ tail -f 1
Ich habe genau das Gleiche gesucht und festgestellt, dass Sie Folgendes tun können:
strace -ewrite -p $PID
Es ist nicht genau das, was Sie brauchen, aber es kommt ziemlich nahe.
Ich habe versucht, die Ausgabe umzuleiten, aber das hat bei mir nicht funktioniert. Vielleicht, weil der Prozess in einen Socket geschrieben hat, ich weiß es nicht.
Bei mir hat das funktioniert:
-
Melden Sie sich als Eigentümer des Prozesses an (auch
root
wird die Erlaubnis verweigert)~$ su - process_owner
-
Beenden Sie den Dateideskriptor, wie in vielen anderen Antworten erwähnt.
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
Hier gibt es einige Optionen. Eine besteht darin, die Ausgabe des Befehls in eine Datei umzuleiten und dann 'tail' zu verwenden, um neue Zeilen anzuzeigen, die dieser Datei in Echtzeit hinzugefügt werden.
Eine andere Möglichkeit besteht darin, Ihr Programm innerhalb von „screen“ zu starten, einer Art textbasierter Terminalanwendung. Bildschirmsitzungen können angehängt und getrennt werden, sind aber nominell nur für die Verwendung durch denselben Benutzer gedacht. Wenn Sie sie also zwischen Benutzern teilen möchten, ist dies ein großer Schmerz im Arsch.