Você pode fazer isso no Linux. Digamos que haja um script s
:
#!/bin/bash
i=0
echo my pid: "$$"
while true; do
echo "$i"; ((i++)); sleep 1;
done
Execute:
$ ./s
my pid: 8815
0
1
2
E assim vai ... Agora você precisa de gdb
para anexar ao processo.
gdb -p 8815
Agora você está em gdb
. Aqui faça isso:
p close(1)
Isso fechou o descritor de arquivo STDOUT. Agora abra um novo:
p creat("/tmp/8815.out", 0600)
Em outro terminal, você já pode definir o processo de leitura:
tail -f /tmp/8815.out
Nada está vindo ainda, já que você precisa se separar de gdb
no outro terminal. Ou Ctl + D ou:
q
Quit anyway? (y or n)
Confirme com y
e Digite . E agora você deve ver (onde o tail
está sendo executado) algo assim:
173
174
175
Se você preferir usar um arquivo ou canal já existente, faça isso em gdb
:
p open("/path/to/your/output", 1)
Isso ilustra o redirecionamento de STDOUT. É semelhante ao STDERR, só tem o número 2.
Eu usei estas duas respostas: