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

Wie kann ein Prozess stdout und stderr eines anderen Prozesses unter Linux abfangen?

Da ich die Antwort von Jauco nicht bearbeiten darf, gebe ich die vollständige Antwort, die für mich funktioniert hat (Russells Seite stützt sich auf ein nicht garantiertes Verhalten, das, wenn Sie den Dateideskriptor 1 für STDOUT schließen, der nächste creat Aufruf öffnet FD 1.

Führen Sie also ein einfaches Endlosskript wie dieses aus:

import time

while True:
    print 'test'
    time.sleep(1)

Speichern Sie es in test.py, führen Sie es mit

aus
$ python test.py

Holen Sie sich die PID:

$ ps auxw | grep test.py

Hängen Sie nun gdb an :

$ gdb -p (pid)

und führe fd aus Magie:

(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1

Jetzt können Sie tail /tmp/stdout und sehen Sie sich die Ausgabe an, die früher zu STDOUT ging.


Es gibt mehrere neue Dienstprogramme, die die "gdb-Methode" zusammenfassen und einige zusätzliche Details hinzufügen. Die, die ich jetzt verwende, heißt "reptyr" ("Re-PTY-er"). Zusätzlich zum Greifen von STDERR/STDOUT wird es tatsächlich das steuernde Terminal eines Prozesses ändern (selbst wenn es vorher nicht an ein Terminal angeschlossen war).

Die beste Verwendung davon ist, eine Bildschirmsitzung zu starten und sie zu verwenden, um einen laufenden Prozess innerhalb von Bildschirm wieder mit dem Terminal zu verbinden, damit Sie sich sicher davon trennen und später zurückkehren können.

Es ist in beliebten Distributionen enthalten (Beispiel:'apt-get install reptyr').

http://onethingwell.org/post/2924103615/reptyr


Linux
  1. So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

  2. So installieren und konfigurieren Sie Monit unter Linux für die Prozessüberwachung

  3. Wie kann ich unter Linux feststellen, welcher Prozess meinem Prozess ein Signal gesendet hat?

  4. Wie kann ich die Größe von Dateien und Verzeichnissen in Linux sehen?

  5. Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?

So beenden Sie einen Prozess in Linux

So unterbrechen Sie einen Prozess und setzen ihn später in Linux fort

So arbeiten Sie mit Vordergrund- und Hintergrundprozessen unter Linux

So finden Sie die PID und PPID eines Prozesses in Linux

So beenden Sie Prozesse in Linux mit kill, killall und pkill

So verfolgen und verfolgen Sie einen Linux-Prozess