Como posso cancelar a pauta de um comando e enviar toda a saída padrão para um arquivo de log

2

Portanto, há a maneira usual de pausar comandos com CTRL + Z e você pode fazer "bg 1" ou algo assim para retomar o comando, e isso funciona muito bem.

E se eu iniciei um comando que envia um monte de saída para stdout, mas não quero mais ver essas coisas depois de "desalimentar" o comando. Eu poderia fazer algo semelhante a "bg 1 > file.log"?

    
por jpm 14.09.2009 / 05:44

1 resposta

4

Isso se baseia em esta resposta que tem instruções para enviar a saída para /dev/null .

Para enviar a saída de um programa em execução para /tmp/file.log , por exemplo, faça o seguinte:

Em um segundo terminal, use ps para obter o ID do processo do seu programa.

Digite touch /tmp/file.log para criar um arquivo vazio para sua saída.

Digite gdb -p [PID] usando o ID do processo de ps .

No prompt (gdb) , digite estes comandos:

p dup2(open("/tmp/file.log",1),1)
p dup2(open("/tmp/file.log",1),2)
detach
quit

Em resposta aos comandos dup2 , você verá " $1 = 1 " e " $2 = 2 ". Você deve ver a saída cessar no outro terminal e você deve ser capaz de cat ou tail -f do arquivo de log (ou usar ls -l repetidamente e ver o aumento de tamanho).

Agora você pode suspender seu processo usando Ctrl - Z e retomá-lo em segundo plano usando bg 1 (ou qualquer que seja o número do trabalho).

    
por 14.09.2009 / 08:38

Tags