systemadmin.es > Utilidades > strace para seguir llamadas a sistema y señales de procesos

strace para seguir llamadas a sistema y señales de procesos

Una de las mejores utilidades para poder seguir la ejecución de un programa para poder saber que esta fallando es strace.

Su uso más sencillo es lanzar el proceso mediante el mismo strace. Por ejemplo, un ls lanzado con strace sería tan sencillo como esto:

# strace ls

Esto no es problema para programas con un solo thread de ejecución, pero en el caso que el proceso haga un fork dejaremos de ver que esta haciendo el proceso hijo.

Para poder seguir un proceso y todos los forks que haga sería con los modificadores -fF. Por ejemplo:

# strace -fF dovecot

Para indicar de que proceso son las trazas delante de la llamada indica el número de PID:

open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libtermcap.so.2", O_RDONLY) = 3
open("/lib64/libdl.so.2", O_RDONLY)     = 3
open("/lib64/libc.so.6", O_RDONLY)      = 3
open("/dev/tty", O_RDWR|O_NONBLOCK)     = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY)         = 3
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/usr/lib64/gconv/ISO8859-1.so", O_RDONLY) = 3
[pid 26282] open("/etc/ld.so.cache", O_RDONLY) = 3
[pid 26282] open("/lib64/librt.so.1", O_RDONLY) = 3
[pid 26282] open("/lib64/libacl.so.1", O_RDONLY) = 3
[pid 26282] open("/lib64/libselinux.so.1", O_RDONLY) = 3
[pid 26282] open("/lib64/libc.so.6", O_RDONLY) = 3
[pid 26282] open("/lib64/libpthread.so.0", O_RDONLY) = 3
[pid 26282] open("/lib64/libattr.so.1", O_RDONLY) = 3
[pid 26282] open("/lib64/libdl.so.2", O_RDONLY) = 3
[pid 26282] open("/lib64/libsepol.so.1", O_RDONLY) = 3

Finalmente, en el caso de querer obtener las trazas de un proceso que ya esta corriendo para saber que esta haciendo se puede hacer pasando al strace el PID mediante la opción -p.

# strace -p 7773
Process 7773 attached - interrupt to quit
select(0, NULL, NULL, NULL, {19, 784000} 
Process 7773 detached

En el caso que se quiera hacer un attach mediante el parámetro -p a un conjunto de procesos, como por ejemplo a todos los procesos de bacula, requiere un poco de scripting. Sería:

# strace -fF -s 128 $(pgrep bacula | sed 's/^/-p /g')

Mediante el parámetro -s que se observa en el comando anterior se amplia el tamaño del string que muestra de las llamadas. Por defecto éste es 32.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>