Gibt es eine Möglichkeit, Nohup wiederherzustellen / wiederherzustellen, um die Ausgabe in der Konsole zu sehen?

8

Ich weiß, die Chancen sind extrem niedrig, aber gibt es einen Weg um zu sehen, was ein nohup-ed-Prozess in letzter Zeit ausgegeben hat?

Ich habe diesen Prozess immer noch geöffnet, aber ich habe ihn ausgeführt, indem ich alle Ausgaben nach / dev / null umgeleitet habe.

Gibt es also eine Möglichkeit, einen solchen Prozess in die Konsole zurückzuholen, oder ist es hoffnungslos: (

Prost

    
Itako 24.11.2010, 10:45
quelle

1 Antwort

8

Es gibt einen Weg, aber es ist nicht direkt, der Trick besteht darin, dup2 zu verwenden und hängt von der Tatsache ab, dass Ihr Programm gegen libc verbunden ist (was alle c / c ++ - Anwendungen wären, aber eine Java-Anwendung nicht) sei zum Beispiel)

  1. Anfügen an Ihren Prozess mit gdb
  2. Führen Sie Folgendes an der gdb-Eingabeaufforderung aus, um stdout an / tmp / newfile

    umzuleiten

    $ print dup2 (offen ("/ tmp / newfile", 0), 1)

  3. Führen Sie Folgendes aus, um stderr nach / tmp / newfile

    umzuleiten

    $ print dup2 (offen ("/ tmp / newfile", 0), 2)

  4. Trennen Sie gdb von Ihrem Prozess und erledigen Sie

Was dup2 tut, ist

  

duplizieren Sie einen Dateideskriptor   Das bedeutet, dass sowohl stdout / stderr (1 und 2) als auch der neue Dateideskriptor, der von open zurückgegeben wurde, austauschbar verwendet werden können. Dadurch wird die gesamte Ausgabe in stdout und stderr in die geöffnete Datei verschoben.

    
hhafez 24.11.2010, 10:55
quelle

Tags und Links