Pode-se pegar um aplicativo em execução do terminal?

26

Às vezes eu preciso executar um aplicativo do terminal para depuração. Se eu tiver certeza de que o bug ocorrerá após o lançamento do aplicativo, posso executar esse aplicativo a partir do Terminal.

No entanto, erros ocorrem inesperadamente, e só então eu preciso monitorar o aplicativo com bugs do Terminal (para ver sua saída).

Posso então pegar um aplicativo do terminal, que não foi lançado usando o Terminal? Se sim, como?

    
por Benjamin 01.09.2011 / 11:35

4 respostas

29

Cada processo no linux tem um diretório especial /proc/{pid}/fd/ . 0 é stdin, 1 é stdout e 2 é stderr. Assim, supondo que você esteja interessado apenas na saída de diagnóstico, você pode determinar o processo pid e, em seguida, no terminal, faça:

para ver a stdout:

cat /proc/{pid of process}/fd/1

para ver stderr:

cat /proc/{pid of process}/fd/2
    
por Michał Šrajer 01.09.2011 / 11:49
9

Ou você pode usar strace assim

sudo strace -p $pid_of_the_process
    
por arrange 01.09.2011 / 11:56
6

Você pode anexar com gdb a um processo em execução.

A sintaxe é

gdb program pid

Ok, você não pode ver o código-fonte, se as informações de depuração forem removidas, que é o padrão para os aplicativos implantados. Mas você provavelmente pode ver mensagens stdout / stderr e debugger, segfaults.

    
por enzotib 01.09.2011 / 11:47
5

Você provavelmente está procurando por retty . Você também pode procurar por "attach tty". Basicamente, é feito usando ptrace para que você possa até mesmo criar o seu próprio.

    
por nc3b 02.09.2011 / 09:28