Ich weiß, wie man Ausgaben umleitet und wie man sie in Bash unterdrückt. Angenommen, ich habe versehentlich vergessen, den Ausgabeumleitungsteil an den Befehl anzuhängen (z. B. 2>&1 oder > /tmp/mystdout ) und mein Hintergrundprozess läuft schon eine Weile, kann ich noch zu stdout wechseln und stderr werden angeschrieben? Ich möchte die Anwendung wirklich nicht beenden und neu starten.
Um genauer zu sein, wie von Gilles in seinem Kommentar gefragt, möchte ich speziell in diesen Szenarien damit herumspielen:
- Falsche Ausgabedatei
- hat vergessen,
stderrumzuleiten zustdout
oder eine Kombination aus beidem
Z.B. Ich habe Apache laufen und kann sehen die Dateideskriptoren:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Akzeptierte Antwort:
Sie können dies mit Reredirect tun (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Sie können die anfängliche Ausgabe Ihres Prozesses später wiederherstellen, indem Sie Folgendes verwenden:
reredirect -N -O <M> -E <N> <PID>
(<M> und <N> werden durch den vorherigen Start der Weiterleitung bereitgestellt).
README umleiten erklärt auch, wie man auf einen anderen Befehl umleitet oder nur stdout oder stderr umleitet.