Strace es una de las herramientas de instrucción, diagnóstico y monitoreo de procesos más poderosas de Linux. También actúa como una herramienta de depuración que ayuda a solucionar problemas. Se utiliza principalmente para los siguientes propósitos:
- Programas de depuración
- Programas de resolución de problemas
- Interceptar llamadas del sistema por un proceso
- Grabar llamadas al sistema por un proceso
- Señales recibidas por un proceso
- Seguimiento de procesos en ejecución
En caso de que el código fuente no esté disponible, strace se usa para analizar cómo un programa interactúa con el sistema para depurar la ejecución del programa . Devuelve el nombre de cada llamada al sistema junto con su argumento entre paréntesis y su valor de retorno a error estándar.
Instalación de la herramienta de monitoreo de procesos strace
Para instalar la herramienta strace, use los siguientes comandos según su distribución de Linux.
En el caso de Debian/Ubuntu
$sudo apt install strace
En el caso de CentOS/RedHat
$yum install strace
Trabajar con la herramienta de monitoreo de procesos de Strace
1. Para obtener la llamada al sistema, el argumento y el resultado de la llamada.
$strace ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como puede verse, muestra la llamada al sistema, el argumento (entre paréntesis) y el resultado de la llamada del comando ls. Y +++ salió con 0 +++ , en la última línea indica que el estado de salida es 0, lo que significa que no hubo error. En caso de error, el código de salida es -1.
2. Para contar el número de llamadas al sistema.
$strace -c ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como se puede observar, muestra el número de veces que se realizó cada llamada al sistema e imprime el total e incluso muestra el número y tiempo empleado en cada llamada.
3. Para rastrear llamadas al sistema particulares o específicas.
$strace -e trace=write ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse. Y el nombre de la llamada al sistema que se va a rastrear es write .
Como puede verse, solo muestra el nombre, el argumento y el resultado de la llamada al sistema de escritura.
4. Para rastrear llamadas al sistema relacionadas con la red
$strace -e trace=network nc -v -n 127.0.0.1 801
Nota: Aquí, “nc -v -n 127.0.0.1 801” es el comando cuya llamada al sistema debe rastrearse. Y el nombre de la llamada al sistema que se va a rastrear es la red.
Como puede verse, solo muestra el nombre, el argumento y el resultado de la llamada al sistema de red.
5. Para rastrear llamadas al sistema relacionadas con la señal
$strace -e trace=signal nc -v -n 127.0.0.1 801
Nota: Aquí, “nc -v -n 127.0.0.1 801” es el comando cuya llamada al sistema debe rastrearse. Y el nombre de la llamada al sistema que se va a rastrear es señal.
Como puede verse, solo muestra el nombre, el argumento y el resultado de la llamada al sistema de señales.
6. Para imprimir la marca de tiempo de cada llamada.
$strace -r ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como se puede ver, muestra una marca de tiempo relativa al ingresar a cada llamada al sistema. Registra la diferencia de tiempo entre el comienzo de sucesivas llamadas al sistema.
7. Para imprimir el tiempo dedicado a las llamadas al sistema.
$strace -T ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como se puede ver, el tiempo dedicado a cada llamada se imprime al final de cada línea.
8. Para imprimir la hora del reloj de pared de cada llamada al sistema.
$strace -t ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como se puede ver, el prefijo de cada línea es el tiempo del reloj de pared propio de la llamada del sistema.
9. Para imprimir el puntero de instrucciones.
$strace -i ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse.
Como puede verse, el puntero de instrucción se imprime en cada línea de salida.
10. Para imprimir la salida en un archivo
$strace -o output.txt ls
Nota: Aquí, «ls» es el comando cuya llamada al sistema debe rastrearse. Y output.txt es el nombre del archivo en el que se almacenará la salida.
Como puede verse, la salida del comando se almacena en el archivo output.txt.