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
stderr
astdout
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.