So come reindirizzare l'output e come sopprimerli in bash. Ora, supponiamo che io abbia accidentalmente dimenticato di aggiungere la parte di reindirizzamento dell'output al comando (ad es. 2>&1 o > /tmp/mystdout ) e il mio processo in background è già in esecuzione da un po', posso ancora passare a dove stdout e stderr vengono scritti? Vorrei davvero non uccidere e riavviare l'applicazione.
Per essere più precisi come chiesto da Gilles nel suo commento, vorrei giocherellare con esso in questi scenari nello specifico:
- File di output errato
- dimenticato di reindirizzare stderrastdout
o una combinazione di entrambi
Per esempio. Ho Apache in esecuzione e posso vedere i descrittori di file:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Risposta accettata:
Puoi farlo usando il reindirizzamento (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Puoi ripristinare l'output iniziale del tuo processo in un secondo momento usando qualcosa come:
reredirect -N -O <M> -E <N> <PID>
 (<M> e <N> sono forniti dal precedente lancio del reindirizzamento).
 reindirizzare README spiega anche come reindirizzare a un altro comando o reindirizzare solo stdout o stderr.