Je sais comment rediriger la sortie et comment les supprimer dans bash. Maintenant, supposons que j'ai accidentellement oublié d'ajouter la partie de redirection de sortie à la commande (par exemple, 2>&1
ou > /tmp/mystdout
) et mon processus d'arrière-plan est déjà en cours d'exécution depuis un certain temps, puis-je toujours changer pour où stdout
et stderr
sont en cours d'écriture ? J'aimerais vraiment ne pas tuer et redémarrer l'application.
Pour être plus précis comme demandé par Gilles dans son commentaire, j'aimerais le tripoter dans ces scénarios en particulier :
- fichier de sortie incorrect
- oublié de rediriger
stderr
versstdout
ou une combinaison des deux
Par exemple. J'ai Apache en cours d'exécution et je peux voir les descripteurs de fichiers :
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Réponse acceptée :
Vous pouvez le faire en utilisant la redirection (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Vous pouvez restaurer la sortie initiale de votre processus ultérieurement en utilisant quelque chose comme :
reredirect -N -O <M> -E <N> <PID>
(<M>
et <N>
sont fournis par le lancement précédent de la redirection).
rediriger README
explique également comment rediriger vers une autre commande ou rediriger uniquement stdout ou stderr.