É possível conectar um terminal a um processo já em execução usando seu PID de maneira semelhante ao uso do fg
comando para trabalhos?
É possível conectar um terminal a um processo já em execução usando seu PID de maneira semelhante ao uso do fg
comando para trabalhos?
Respostas:
Você pode obter os descritores de arquivo padrão desse processo, por exemplo stdout
:
tail -f /proc/<pid>/fd/1
# ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Existem algumas opções aqui. Uma é redirecionar a saída do comando para um arquivo e, em seguida, usar tail
para exibir novas linhas que são adicionadas a esse arquivo em tempo real.
Outra opção é iniciar o programa dentro dele screen
, que é um aplicativo de terminal baseado em texto. As sessões de tela podem ser anexadas e desanexadas, mas são destinadas apenas a serem usadas pelo mesmo usuário, portanto, se você quiser compartilhá-las entre os usuários.
Caso contrário, se desejar, você pode rastrear o processo e ver o que está fazendo strace
:
strace -e trace=open -p 22254 -s 80 -o output.txt
-p PID
: Anexe ao processo com o ID do processo PID e inicie o rastreio.-s SIZE
: Especifique o tamanho máximo da sequência a ser impressa (o padrão é 32).-o filename
: Grave a saída de rastreamento no nome do arquivo e não na tela (stderr).sudo
com strace para anexar a um processo e usar -o ~/output.txt
para que o arquivo seja deixado na sua pasta pessoal.
Você pode usar estes comandos abaixo para anexar um processo em execução em outro terminal:
Exemplo:
screen -S PID
retty $(pgrep PID)
reptyr PID
sudo apt-get install retty
mas há poucas limitações com o retty. Confira a página de manual mencionada em resposta.