Como redirecionar a saída de um programa em execução para / dev / null


19

Sei que, para suprimir a saída de um programa, posso redirecioná-lo para /dev/null, por exemplo, para ocultar todas as mensagens de erro e aviso do cromo, posso iniciar o programa como este

chromium-browser 2> /dev/null &

No entanto, se eu esquecer as mensagens de erro e digitar

chromium-browser &

(o que é bastante irritante quando eles aparecem no meio de um comando) Não sei o que fazer, exceto parar o aplicativo e iniciá-lo novamente.

De alguma forma, posso redirecionar a saída de erro sem reiniciar o aplicativo?

Respostas:


8

Você também pode iniciar o navegador com nohup e fechar a janela do terminal com o seguinte:

nohup chromium-browser &

Dessa forma, o navegador será iniciado e desconectado do console, que poderá ser fechado silenciosamente.


2
que é aceitável, exceto para o fato de que eu vou ter que lembrar de digitarnohup
phunehehe

5
@phu No zsh, pelo menos você pode colocar o setopt nohupseu .zshrce ele não fará tudo o que você executar; Não tenho certeza sobre outras conchas
Michael Mrozek

sim, ótimo, eu gosto desse jeito!
phunehehe

3
Ou você pode criar um alias ... Nome cromo = nohup cromo
Pablo Olmos de Aguilera C.

22

Isso foi respondido aqui: aqui por vladr . A resposta é (citando):

  • anexe ao processo em questão usando o gdb e execute:
  • p dup2 (aberto ("/ dev / null", 0), 1) (para redirecionamento stdout)
  • p dup2 (aberto ("/ dev / null", 0), 2) (para redirecionamento stderr)
  • destacar
  • Sair

Eu tentei no seguinte script:

[edição após o primeiro comentário:]

dormir 10 # para que eu possa ter tempo para me conectar ao processo
se ["$ sonorfather" == "pai"] # evitar recursões infinitas 
então 
   sonorfather = filho ./test & 
fi 

enquanto verdadeiro 
Faz 
   eco "stdout $ sonorfather" 
   eco "stderr $ sonorfather"> & 2 
   dormir 1 
feito 

Desabilitei a saída stderr antes da criação do processo filho, aqui está a saída:

pai stdout 
filho stdout 
pai stdout 
filho stdout 
[e assim por diante...]. 

Espero que isso responda à sua pergunta: o processo filho stderr também foi redirecionado.


3
isso foi muito bom, mas talvez eu tenha problemas com o cromo, pois gera um novo processo para cada guia do navegador, de qualquer forma para resolver?
phunehehe

Editou minha postagem para responder a você.
Mike Perdide

Parece que vou precisar redirecionar a saída antes que os processos filho sejam criados? Agradecimentos para o conhecimento, mas sobre a complexidade eu tinha acabado de ir com nohup:)
phunehehe

Tecnicamente, isso vaza descritores de arquivo duplicados para /dev/null, mas na prática isso não afeta nada significativamente.
Kevin

6

Você também pode configurar um alias para chromium-browserexecutarchromium-browser 2> /dev/null

por exemplo, se você estiver usando o bash, edite /home/username/.bashrc e adicione a linha:

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

ou melhor ainda

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

e salve algumas teclas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.