2010-10-29 18 views
69

Usé strace para unir brevemente a un proceso. El proceso creó 90 hilos. Cuando encontré el hilo ofensivo, tuve que buscar tediosamente el hilo principal, luego el hilo de los abuelos, y así sucesivamente hasta llegar al proceso raíz.¿Cómo rastrear el proceso hijo usando strace?

¿Hay algún truco o herramienta para averiguar rápidamente qué hilo creó otro? O mejor aún, imprima el árbol de creaciones de hilos como pstree?

Respuesta

12

no puedo ver una manera fácil:

usted podría utilizar la opción -ff con -o filename para producir múltiples archivos (uno por pid).

por ejemplo:

strace -o process_dump -ff ./executable 
grep clone process_dump* 

que ayudará a ver cuál de los padres lo creó. Quizás eso te ayude, al menos entonces podrías buscar hacia atrás.

71

strace -f para rastrear el proceso secundario que es fork() ed.

15

Hay una secuencia de comandos perl llamada strace-graph. Aquí hay un version from github. Se empaqueta con crosstool-ng versiones de compiladores. Funciona para mí, incluso se usa plataforma cruzada.

ARM Linux box.

$ ./strace -f -q -s 100 -o app.trc -p 449 
$ tftp -pr app.trc 172.0.0.133 

X86_64 Linux box.

$ ./strace-graph /srv/tftp/app.trc 
(anon) 
    +-- touch /tmp/ppp.sleep 
    +-- killall -HUP pppd 
    +-- amixer set Speaker 70% 
    +-- amixer set Speaker 70% 
    +-- amixer set Speaker 70% 
    +-- amixer set Speaker 70% 
    +-- amixer set Speaker 50% 
    +-- amixer set Speaker 70% 
    `-- amixer set Speaker 50% 

La salida se puede utilizar para ayudar a navegar el registro de seguimiento principal.

+0

muy agradable, esto es casi exactamente algo que quería durante al menos varios días. sorprendentemente, incluso puedo verlo en mi/usr/share/doc/strace/examples /. – mykhal

Cuestiones relacionadas