Ich habe ein Skript auf einem Remote-Computer ausgeführt, als ich lokal daran gearbeitet habe. Ich kann mich über SSH als derselbe Benutzer mit dem Computer verbinden und sehen, wie das Skript in ps
ausgeführt wird .
$ ps aux | grep ipcheck
myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh
Es wird einfach in einer lokalen Sitzung an stdout ausgegeben (ich habe ./ipchecker.sh
ausgeführt bilden ein lokales Terminalfenster, keine Umleitung, keine Verwendung von screen
usw.).
Gibt es trotzdem eine SSH-Sitzung, in der ich die Ausgabe dieses laufenden Befehls anzeigen kann (ohne ihn zu stoppen)?
Bisher ist das Beste, was ich gefunden habe, die Verwendung von strace -p 18386
aber ich bekomme Horden von Text, der über den Bildschirm fliegt, er ist viel zu detailliert. Ich kann strace
stoppen und sichten Sie dann die Ausgabe und finden Sie den Text, der nach stdout gedruckt wird, aber er ist sehr lang und verwirrend, und offensichtlich könnte ich etwas verpassen, während er angehalten wird. Ich würde gerne einen Weg finden, die Skriptausgabe live zu sehen, als ob ich lokal arbeiten würde.
Kann das jemand verbessern? Die offensichtliche Antwort ist, das Skript mit Umleitung oder in einem screen
neu zu starten Sitzung usw., dies ist kein geschäftskritisches Skript, also könnte ich das tun. Ich sehe dies jedoch eher als eine unterhaltsame Lernübung.
Akzeptierte Antwort:
Wenn Sie lediglich den vorhandenen Prozess ausspionieren möchten, können Sie strace -p1234 -s9999 -e write
verwenden wobei 1234 die Prozess-ID ist. (-s9999
vermeidet das Abschneiden von Strings auf 32 Zeichen und write
der Systemaufruf, der die Ausgabe erzeugt.) Wenn Sie nur Daten sehen möchten, die in einen bestimmten Dateideskriptor geschrieben wurden, können Sie so etwas wie strace -p1234 -e trace= -e write=3
verwenden um nur Daten zu sehen, die in den Dateideskriptor 3 geschrieben wurden (-e trace=
verhindert, dass die Systemaufrufe protokolliert werden). Dadurch erhalten Sie keine Ausgabe, die bereits produziert wurde.
Wenn die Ausgabe zu schnell vorbeiscrollt, können Sie sie in einen Pager wie less
leiten , oder senden Sie es mit strace -o trace.log …
in eine Datei .
Bei vielen Programmen können Sie die nachfolgende Ausgabe mit einem Ptrace-Hack entweder auf Ihr aktuelles Terminal oder auf eine neue Bildschirmsitzung umleiten. Siehe Wie kann ich einen laufenden Prozess verwerfen und ihn einer neuen Bildschirm-Shell zuordnen? und andere verlinkte Threads.
Beachten Sie, dass Sie je nach Konfiguration Ihres Systems möglicherweise alle diese strace
ausführen müssen Befehle als root ausführen, auch wenn der Prozess unter Ihrem Benutzer ohne zusätzliche Berechtigungen ausgeführt wird. (Wenn der Prozess unter einem anderen Benutzer ausgeführt wird oder setuid oder setgid ist, müssen Sie strace
ausführen als root.) Die meisten Distributionen erlauben einem Prozess nur, seine untergeordneten Prozesse zu verfolgen (dies bietet einen moderaten Sicherheitsvorteil – es verhindert eine direkte Malware-Injektion, aber nicht eine indirekte Injektion durch Ändern von Dateien). Dies wird von kernel.yama.ptrace_scome
gesteuert sysctl.