Hola compañeros de la shell, en esta entrada vamos a escribir sobre un tema ampliamente tratado como es la monitorización/revisión de procesos desde CLI en GNU/Linux.
El comando por excelencia para monitorizar procesos en GNU/Linux es: ps
Siempre es recomendable leer con detenimiento el manual de los comandos que vayamos a utilizar, pero en el caso de ps este hábito se convierte en indispensable:
man ps
A modo de resumen: si utilizamos ps con argumentos precedidos por el caracter «-» la salida de ps será de tipo Unix-like. Si usamos ps sin «-» la salida de ps será de tipo BSD-like. Por lo tanto, a la hora de interpretar la salida de ps es importante tener en cuenta que:
ps -aux
Es distinto de:
ps aux
Por otro lado, una lectura rápida sobre el filesystem /proc es fundamental ya que el contenido del directorio /proc/PID del proceso en ejecución a monitorizar nos aportará una información muy valiosa.
Aplicaciones prácticas sobre monitorización de procesos en GNU/Linux:
1. Comprobar si un proceso está corriendo (hay muchas formas, a continuación algunas):
ps PID top -p PID ps -efww | grep PID
2. Ver el tiempo que lleva en máquina un proceso:
ps -p PID -o etime=
3. Ver el consumo de memoria y cpu de un proceso:
ps -p PID -o vsz,rss,pcpu ## Ejmplo de output ps -p 14924 -o vsz,rss,pcpu VSZ RSS %CPU 1955076 525816 0.1
4. Argumentos que se pasaron al proceso (contenido del fichero /proc/PID/cmdline):
cat /proc/PID/cmdline | tr '\0' '\n'
5. Librerías usadas por el proceso (contenido del fichero /proc/PID/maps):
cat /proc/PID/maps | awk '{print $6}' | egrep -v "\[stack\]|\[heap\]" | sed '/^$/d' | uniq
6. Directorio actual del proceso (comando válido para Solaris):
pwdx PID
7. Revisión de status/consumos de un proceso en modo «batch» mediante top:
top -b -p PID_PROCESO -n 1
8. Procesos ordenados por score de OOM Killer (fuente original):
printf 'PID\tOOM Score\tOOM Adj\tCommand\n' while read -r pid comm; do [ -f /proc/$pid/oom_score ] && [ $(cat /proc/$pid/oom_score) != 0 ] && printf '%d\t%d\t\t%d\t%s\n' "$pid" "$(cat /proc/$pid/oom_score)" "$(cat /proc/$pid/oom_score_adj)" "$comm"; done < <(ps -e -o pid= -o comm=) | sort -k 2nr
9. Detección de posibles procesos residuales (más de 24 horas desde su ejecución):
ps -eo etimes,pid,euser,lstart,etime,args --sort -etimes | awk '{if ($1 > 24*3600) print $0 }'
Espero que os sirva.
Nos vemos al otro lado de la pantalla negra.
