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,
stderr
umzuleiten 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.