Como obter stdout de uma sessão "perdida"

0

Eu não sei qual é o nome da situação, acho que ontem fechei uma sessão com um processo ipython em segundo plano, mas ainda consigo me conectar a ele (o processo está executando um servidor web e posso carregar o página). Ainda posso ver o stdout / stderr do processo?

Se eu executar ps -f -Umyname , obtenho (excluí algumas linhas não relacionadas, mas o PID e o PPID são os reais):

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
16131     1767  1765  0 11:20 ?        S      0:03 sshd: myname@notty
16131     1946 21019  0 11:25 ?        Sl     1:47 /usr/bin/python -m IPython.kernel -f /home/myname/.ipython/profile_default/security/kernel-c72091
16131     3946 21019  0 14:37 pts/3    Ss+    0:00 /bin/bash
16131     4003  4001  0 14:38 ?        S      0:01 sshd: myname@pts/14
16131     4004  4003  0 14:38 pts/14   Ss     0:00 -bash
16131     6366  4004  0 16:41 pts/14   R+     0:00 ps -f Umyname
16131    21019     1  0 Jul30 ?        Sl     0:52 /usr/bin/python ipython notebook 

Tenho certeza de que não está sendo exibido em uma tela. Qualquer ideia? Eu sou interesse em PID 21019

    
por laika 31.07.2015 / 16:55

1 resposta

1

Você pode usar strace para ver a saída de um processo em execução.

$ strace -p 21019 -e write=1,2

O comando acima será anexado ao processo com o PID 21019 e rastrear as chamadas de gravação para fd 1 (stdout) e 2 (stderr).

Quando estiver pronto, você pode enviar um sigint (para strace) para desanexar (pressione ctrl + c ).

editar: Existem também algumas ferramentas que permitem anexar um processo em execução a um novo terminal, por ex. reptyr , screenify, retty. Observe que a maioria deles usa strace, gdb ou ferramentas de rastreamento semelhantes para realizar isso, mas eles tendem a produzir uma saída mais bonita.

    
por 04.08.2015 / 21:28