Cuando bajo nuestra responsabilidad tenemos maquinas con sistemas operátivos Linux, una de las formas más útiles y prácticas para gestionar de forma correcta cada aspecto de estas es conociendo las diferentes utilidades y comandos que existen para desplegar y brindar soporte a estas.
En esta oportunidad Solvetic hablará de una utilidad de línea de comandos llamada strace y veremos cómo puede convertirse en algo práctico para la administración del sistema operativo.
La herramienta strace captura y registra todas las llamadas al sistema realizadas por un proceso y las señales recibidas por el proceso, strace se encarga de mostrar el nombre de cada llamada al sistema junto con sus argumentos entre paréntesis y su valor de retorno a error estándar, opcionalmente, será posible redirigirlo a un archivo.
1. Instalación de strace
Para instalar strace debemos ejecutar alguno de los siguientes comandos:
sudo apt install strace (Debian o Ubuntu)yum install strace (RedHat o CentOS)dnf install strace (Fedora)En caso de que un programa se bloquee o se comporte de una manera inesperada, será posible acceder a las llamadas del sistema para obtener una idea de lo que sucedió exactamente durante su ejecución.
Las llamadas al sistema se pueden categorizar en diferentes eventos: los relacionados con la administración de procesos, los que toman un archivo como argumento, los que involucran redes, asignación de memoria, señales, IPC y también llamadas al sistema relacionadas con descriptores de archivos.
2. Cómo solucionar problemas de procesos en Linux con comandos strace
A continuacion vamos a ver diferentes comandos strace para solucionar los diferentes problemas de procesos que pueden surgir en Linux.
strace df -h
En este resultado, podemos ver varios tipos de llamadas al sistema realizadas por el comando df, por ejemplo, una de ellas es:
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3Donde:
- Open: Es el tipo de llamada al sistema
- Es el argumento de la llamada al sistema: “/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC
- 3: Es el valor de retorno de la llamada al sistema
sudo strace -c -p 465Esto llenará la pantalla con la salida continua que muestra que las llamadas al sistema están siendo realizadas por el proceso, para finalizar, presionaremos las teclas Ctrl + C.
sudo strace -c -p (PID)
Imprimir puntero de instrucción durante la llamada al sistema. La opción -i despliega el puntero de instrucción en el momento de cada llamada al sistema realizada por el programa.
sudo strace -i df -h
sudo strace -e trace=write df -h
Algunos comandos adicionales que podemos usar son:
sudo strace -e trace=open,close df -hsudo strace -e trace=open,close,read,write df -hsudo strace -e trace=all df -h
sudo strace -q -e trace=process df -h
Ahora, para rastrear todas las llamadas al sistema que toman un nombre de archivo como argumento, ejecutaremos el siguiente comando:
sudo strace -q -e trace=file df -h
Para rastrear todas las llamadas al sistema que implican asignación de memoria, ejecutaremos la siguiente línea:
sudo strace -q -e trace=memory df -h
sudo strace -o df_debug.txt df -h
Este archivo podremos visualizarlo ejecutando la línea:
cat df_debug.txt
Así hemos visto como strace se convierte en una ayuda más para las tareas de gestión en distros de Linux.