GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich die Ausgabe eines laufenden Prozesses in einer anderen Bash-Sitzung anzeigen?

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.

Siehe auch:So gewinnen Sie das Cloud-Operations-Spiel mit Kubernetes-Automatisierung und senken dabei die Kosten
Linux
  1. Ist es möglich, die eingebauten Befehle zu Bash zu verfolgen?

  2. Wie ändere ich die Ausgabeumleitung eines laufenden Prozesses?

  3. Wie bekomme ich das Tty, in dem Bash läuft?

  4. Wie kann ich die laufenden Prozesse eines beliebigen Benutzers in SSH anzeigen?

  5. So leiten Sie die Ausgabe eines bereits laufenden Prozesses um

So verwenden Sie den Bash-Lesebefehl

So listen Sie laufende Prozesse in Linux auf

Reptyr – Verschieben Sie einen laufenden Prozess von einem Terminal zum anderen, ohne es zu schließen

Wie erhöhe ich den Scrollback-Puffer in einer laufenden Bildschirmsitzung?

Wie bekomme ich nur alle laufenden Prozess-IDs?

So rufen Sie die GID eines laufenden Prozesses programmgesteuert ab