Obtém a saída mais recente de um comando em execução

3

Eu tenho um comando em execução por um longo tempo, que não quero perturbar. No entanto, gostaria de verificar o processo (na maioria das vezes remotamente). Eu estou constantemente monitorando o processo através de comandos como top , iotop , stat etc. O processo é um processo baseado em terminal que não foi iniciado via screen ou tmux ou similar. Então, a única maneira de verificar a saída é usando o acesso físico.

Eu sei que /proc contém muitas informações sobre o processo. Então eu queria saber se ele também pode exibir a saída (ou até mesmo o último lote de saída - char / word / line). Pesquisei em /proc/<pid>/fd , mas não consegui encontrar nada de útil.

Abaixo está a saída de ls -l /proc/26745/fd/*

lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/0 -> /dev/pts/17
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/1 -> /dev/pts/17
lrwx------ 1 user user 64 Sep 27 22:27 /proc/26745/fd/2 -> /dev/pts/17

Algum apontador?

    
por Mike V.D.C. 28.10.2018 / 09:12

1 resposta

5

Eu usaria strace para isso:

strace -qfp PID -e trace=write -e write=1,2

Isso rastreará todas as chamadas do sistema% P_de% do PID e seus processos filhos e fará o hexdump dos dados gravados nos descritores de arquivo 1 e 2.

Claro, isso não permitirá que você veja o que o processo já escreveu para o tty, mas começará a monitorar todas as gravações de um ponto em diante.

Além disso, write(2) não pode alterar seu formato de saída - você deve explorar usando strace ou escrever um programa pequeno usando gdb(1) se precisar de mais flexibilidade.

    
por 28.10.2018 / 10:26