No shell, você pode fazer o redirecionamento >
<
etc., mas que tal APÓS o início de um programa?
Aqui está como vim fazer essa pergunta: um programa em execução no fundo do meu terminal continua emitindo texto irritante. É um processo importante, então eu tenho que abrir outro shell para evitar o texto. Eu gostaria de poder>/dev/null
ou algum outro redirecionamento para continuar trabalhando no mesmo shell.
Respostas:
Antes de fechar e reabrir seu tty (por exemplo, fazer logoff e logon novamente, o que também pode encerrar alguns de seus processos em segundo plano no processo), você só tem uma opção:
por exemplo:
Você também pode considerar:
screen
; A tela fornece vários TTYs virtuais com os quais você pode alternar sem precisar abrir novas sessões SSH / telnet / etc,nohup
; isso permite que você feche e reabra sua sessão sem perder nenhum processo em segundo plano no processo.fonte
open("/path/to/new/stdout",O_WRONLY)
. O_WRONLY provavelmente não estará disponível; seu valor está1
no Linux / glibc.1025
ativaO_APPEND
, além deO_WRONLY
, que é útil se você redirecionar tanto stderr e stdout para o mesmo arquivo.Isso fará:
Não é tão limpo (mostra linhas como:)
write(#,<text you want to see>)
, mas funciona!Você também pode não gostar do fato de que os argumentos são abreviados. Para controlar isso, use o
-s
parâmetro que define o comprimento máximo de cadeias exibidas.Ele captura todos os fluxos, então você pode filtrar isso de alguma forma:
mostra apenas as chamadas do descritor 1.
2>&1
é redirecionar STDERR para STDOUT, comostrace
escreve para STDERR por padrão.fonte
sudo
seja necessário.riffing excelente pesquisa de vladr (e outros):
crie os dois arquivos a seguir no mesmo diretório, algo no seu caminho, digamos $ HOME / bin:
silence.gdb, contendo (da resposta de vladr):
e silêncio, contendo:
Agora, da próxima vez que você esquecer de redirecionar o firefox, por exemplo, e seu terminal começar a ficar cheio de mensagens inevitáveis "(firefox-bin: 5117): Gdk-WARNING **: colisão XID, problemas à frente":
Você também pode redirecionar a saída do gdb para / dev / null se não quiser vê-la.
fonte
--batch-silent
que suprime a saída e não o despeja no console do gdb se algo der errado (por exemplo, processo ausente). BTW,$!
refere-se ao trabalho em segundo plano mais recente, mas acho que não pode ser usado no próprio script. Eu uso um apelido:alias silencebg='silence $!'
Redirecione a saída de um processo em execução para outro terminal, arquivo ou tela:
Dentro do gdb :
Desanexe um processo em execução do terminal bash e mantenha-o vivo:
Explicação:
20818 - apenas um exemplo do processo em execução pid
p - imprima o resultado do comando gdb
close (1) - feche a saída padrão
/ dev / pts / 4 - terminal para gravar no
fechamento (2) - feche a saída de erro
/ tmp / myerrlog - arquivo para gravar em
q - sair do gdb
bg% 1 - executar o trabalho parado 1 no fundo
rejeitado% 1 - desanexar o trabalho 1 do terminal
fonte
stdin
(descritor de arquivo0
) estiver fechado.p open("/tmp/myerrlog", 2)
?Não é uma resposta direta à sua pergunta, mas é uma técnica que eu tenho achado útil nos últimos dias: execute o comando inicial usando 'screen' e, em seguida, desanexe.
fonte
esta é a parte do script bash com base nas respostas anteriores, que redirecionam o arquivo de log durante a execução de um processo aberto, é usado como postscript no
logrotate
processofonte
https://www.isi.edu/~yuri/dupx/
fonte
Você pode usar o reredirect ( https://github.com/jerome-pouiller/reredirect/ ).
Tipo
e as saídas (padrão e erro) serão gravadas em FILE.
O README da reredirect também explica como restaurar o estado original do processo, como redirecionar para outro comando ou redirecionar apenas stdout ou stderr.
reredirect
Também forneça um script chamadorelink
que permite redirecionar para o terminal atual:(O reredirect parece ter os mesmos recursos que o Dupx descrito em outra resposta, mas isso não depende do Gdb).
fonte