strace -p com número de linhas de contexto / histórico

2

Eu gostaria de strace de um processo em execução, o que sei que posso fazer com strace -p <pid> , mas acredito que o processo permaneceu em alguma chamada de bloqueio, por exemplo, sem_wait() em um semáforo nunca publicado, etc., e a saída de strace é apenas uma linha, como:

Process 195 attached - interrupt to quit
poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}], 2, 3600000^C <unfinished ...>

É possível especificar strace para gerar mais linhas de contexto / histórico? Eu estou supondo que não, porque eu estou supondo strace de saída em tempo real e por função / instrução, mas eu pensei em pedir para confirmar.

    
por StoneThrow 13.09.2017 / 06:15

2 respostas

3

Você está correto, não há histórico disponível.

Caso não seja óbvio, a saída mostrará que o processo está em uma chamada poll , aguardando a entrada dos descritores de arquivo 3 e 6. A execução de ls -l /proc/195/fd deve mostrar o que esses descritores estão conectados.

    
por 13.09.2017 / 06:27
2

Você também pode anexar a um processo com gdb e ver a pilha atual, por exemplo, o que pode ajudar, especialmente se você tiver compilado seu programa com símbolos de depuração, você terá mais informações.

Como exemplo, execute sleep em segundo plano, obtenha seu pid e execute gdb com o pid e o arquivo de objeto, em seguida, forneça o comando bt para backtrace. Para continuar o tipo de programa detach .

$ sleep 999 & 
[1] 17340
$ gdb -p 17340 /bin/sleep 
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Attaching to program: /usr/bin/sleep, process 17340
Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.24-8.fc23.x86_64
(gdb) bt
#0  0x00007fb84f43d510 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x0000562be81da29f in rpl_nanosleep ()
#2  0x0000562be81da100 in xnanosleep ()
#3  0x0000562be81d7a1d in main ()
(gdb) detach
Detaching from program: /usr/bin/sleep, process 17340
(gdb) quit
    
por 13.09.2017 / 12:10

Tags