Inicio > Gestión de paquetes y sistema > strace

strace: Rastreo de llamadas al sistema y señales

strace es una potente herramienta de diagnóstico en Linux que rastrea y registra las llamadas al sistema (syscalls) y las señales recibidas por un proceso. Permite comprender en detalle cómo interactúa un programa con el kernel, lo que lo hace útil para la depuración, el análisis de rendimiento y las auditorías de seguridad.

Descripción general

strace rastrea todas las llamadas al sistema y eventos de señales de un proceso, ya sea ejecutando un comando específico o adjuntándose a un proceso en ejecución. Muestra esta información en tiempo real, lo que es esencial para comprender el comportamiento de bajo nivel de un programa, como la E/S de archivos, la comunicación de red y la gestión de memoria.

Funciones principales

  • Rastreo de llamadas al sistema y señales de un proceso
  • Visualización de argumentos, valores de retorno y códigos de error para cada llamada
  • Adjuntarse a un proceso en ejecución para rastrearlo
  • Rastreo de procesos hijos junto con el proceso padre
  • Filtrado de llamadas al sistema o señales específicas

Opciones principales

strace ofrece varias opciones para controlar finamente el método de rastreo y el formato de salida.

Opciones de rastreo básicas

Control de salida

Filtrado

Comando generado:

Combina los comandos.

Descripción:

`strace` Ejecutando el comando.

Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.

Ejemplos de uso

Varios ejemplos de uso de strace.

Rastreo de comando simple

strace ls

Rastrea las llamadas al sistema del comando `ls`.

Guardar resultados del rastreo en un archivo

strace -o date_trace.log date

Guarda las llamadas al sistema del comando `date` en el archivo `date_trace.log`.

Rastrear un proceso en ejecución

strace -p 12345

Se adjunta a un proceso con PID 12345 para rastrear sus llamadas al sistema. (Reemplace 12345 con el ID de proceso real).

Rastrear procesos hijos

strace -f bash -c "echo Hello, strace!"

Cuando se ejecuta el comando `echo` en una shell `bash`, rastrea las llamadas al sistema tanto de `bash` como de `echo`.

Filtrar solo llamadas al sistema específicas

strace -e trace=open,read,write cat /etc/hosts

Rastrea si el comando `cat /etc/hosts` utiliza las llamadas al sistema `open`, `read`, `write`.

Verificar el tiempo de ejecución de las llamadas al sistema

strace -T ls

Muestra el tiempo empleado en cada llamada al sistema.

Instalación

strace puede no estar incluido por defecto en la mayoría de las distribuciones de Linux. Puede instalarlo usando los siguientes comandos.

Debian/Ubuntu

sudo apt update && sudo apt install strace

Instala usando el gestor de paquetes APT.

CentOS/RHEL 7

sudo yum install strace

Instala usando el gestor de paquetes YUM.

Fedora/RHEL 8+

sudo dnf install strace

Instala usando el gestor de paquetes DNF.

Consejos y precauciones

strace es potente, pero hay algunas consideraciones al usarlo.

Impacto en el rendimiento

strace intercepta las llamadas al sistema de un proceso, por lo que puede afectar significativamente el rendimiento del programa rastreado. Esto es especialmente cierto para programas con mucha E/S. Úselo con precaución en entornos de producción.

Interpretación de la salida

La salida de strace puede ser muy extensa, por lo que es recomendable filtrar la información necesaria (-e) o guardarla en un archivo (-o) para su análisis. Puede encontrar información detallada sobre llamadas al sistema específicas usando el comando `man 2 <nombre_llamada_sistema>`.

Permisos

Se requieren privilegios de `root` para rastrear procesos de otros usuarios o para rastrear el comportamiento general del sistema.

Diferencia con herramientas de depuración

strace opera a nivel de llamada al sistema y, a diferencia de depuradores como `gdb`, no puede manipular directamente variables internas del programa, llamadas a funciones o ver rastreos de pila. Ambas herramientas pueden usarse de forma complementaria.


Comandos de la misma categoría