Cómo redirigir la salida de un programa en ejecución a / dev / null

19

Sé que para suprimir la salida de un programa, puedo redirigirlo a /dev/null, por ejemplo, para ocultar todos los mensajes de error y advertencia de Chrome, puedo iniciar el programa de esta manera.

chromium-browser 2> /dev/null &

Sin embargo, si me olvido de los mensajes de error y escribo

chromium-browser &

(lo cual es bastante molesto cuando aparecen en medio de un comando) No sé qué hacer, excepto detener la aplicación y volver a iniciarla correctamente.

¿Puedo de alguna manera redirigir la salida de error sin reiniciar la aplicación?

phunehehe
fuente

Respuestas:

8

También puede iniciar el navegador con nohup y luego cerrar la ventana del terminal con lo siguiente:

nohup chromium-browser &

De esta manera, el navegador se iniciará y se desconectará de la consola, que luego se puede cerrar en silencio.

Lito
fuente
2
eso es aceptable, excepto por el hecho de que tendré que recordar escribirnohup
phunehehe
55
@phu En zsh al menos puedes poner setopt nohuptu .zshrcy no hará nada con todo lo que ejecutes; No estoy seguro acerca de otros proyectiles
Michael Mrozek
sí, genial, me gusta de esta manera!
phunehehe
3
O puede crear un alias ... alias chromium = nohup chromium
Pablo Olmos de Aguilera C.
22

Esto fue respondido aquí: aquí por vladr . La respuesta es (citando):

  • adjunte al proceso en cuestión usando gdb y ejecute:
  • p dup2 (abierto ("/ dev / null", 0), 1) (para redireccionamiento stdout)
  • p dup2 (abierto ("/ dev / null", 0), 2) (para redireccionamiento stderr)
  • despegar
  • dejar

Lo probé en el siguiente script:

[edición después del primer comentario:]

duermo 10 # para poder tener tiempo para unirme al proceso
si ["$ sonorfather" == "padre"] # evita la recursión infinita 
luego 
   sonorfather = hijo ./test & 
fi 

aunque cierto 
hacer 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   dormir 1 
hecho 

Inhabilité la salida stderr antes de que se creara el proceso hijo, aquí está la salida:

padre stdout 
hijo stdout 
padre stdout 
hijo stdout 
[y así...]. 

Espero que esto responda su pregunta: el proceso hijo stderr también fue redirigido.

Mike Perdide
fuente
3
eso fue muy bueno, pero entonces puedo tener problemas con el cromo, ya que genera un nuevo proceso para cada pestaña del navegador, ¿de todos modos resolver?
phunehehe
Edité mi publicación para responderte.
Mike Perdide
¿Parece que tendré que redirigir la salida antes de que se creen los procesos secundarios? Gracias por el conocimiento, pero en cuanto a la complejidad que acababa de ir con nohup:)
phunehehe
Técnicamente, esto filtra descriptores de archivos duplicados /dev/null, pero en la práctica eso no afecta significativamente nada.
Kevin
6

También puede configurar un alias para chromium-browserejecutar en su lugarchromium-browser 2> /dev/null

por ejemplo, si está usando bash, edite /home/username/.bashrc y agregue la línea:

chromium-browser='chromium-browser 2> /dev/null'

o mejor aún

chrome='chromium-browser 2> /dev/null'

y guardar algunas pulsaciones de teclas.

usuario1433
fuente