Sé cómo redirigir la salida y cómo suprimirlos en bash. Ahora, supongamos que accidentalmente olvidé agregar la parte de redirección de salida al comando (por ejemplo, 2>&1 o > /tmp/mystdout ) y mi proceso en segundo plano ya se está ejecutando durante un tiempo, ¿puedo cambiar a donde stdout y stderr se les escribe? Realmente me gustaría no matar y reiniciar la aplicación.
Para ser más específico, como lo solicitó Gilles en su comentario, me gustaría jugar con esto en estos escenarios en específico:
- archivo de salida incorrecto
- olvidé redirigir
stderrastdout
o una combinación de ambos
P.ej. Tengo Apache ejecutándose y puedo ver los descriptores de archivo:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Respuesta aceptada:
Puedes hacerlo usando redirección (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Puede restaurar la salida inicial de su proceso más tarde usando algo como:
reredirect -N -O <M> -E <N> <PID>
(<M> y <N> son proporcionados por el lanzamiento anterior de redirección).
redirigir README también explica cómo redirigir a otro comando o redirigir solo a stdout o stderr.