
Propiedades de los procesos
Básicamente, un proceso o tarea en Linux tiene las siguientes propiedades:
-
Un PID (identificador de proceso), es necesario para referirnos a un proceso en concreto de los varios en ejecución.
-
Un PPID (Identificador del proceso padre), es el número que indica qué proceso creó al proceso en cuestión.
-
Un estado, habrá momentos en los que un proceso seguirá existiendo en el sistema, pero no estará haciendo nada realmente. Puede estar esperando a que una señal le sea enviada para volverse activo, o a nosotros como usuarios nos puede interesar detenerlo o pausarlo bajo determinadas circunstancias. Los estados más importantes son dormido (S), y en ejecución (R).
-
Un dueño, generalmente es el usuario que lo ejecutó, y como ya se dijo, el proceso hereda los permisos del usuario de cara al sistema de ficheros. Si un ejecutable es SUID, al ejecutarse, el proceso resultante adquiere los permisos del usuario dueño del archivo. Generalmente, un usuario normal no puede ejercer control sobre procesos que no le pertenecen.
-
Una prioridad que determina su importancia, ya que no todos los procesos son igual de importantes.
Monitorización de procesos
pstree
Con este comando podemos ver las tareas y sus subtareas en una estructura anidada. Con el parámetro –p se muestran también los PIDs de los procesos.
pstree
ps
Este comando muestra una lista de los procesos en ejecución en un instante dado.
ps -u
Muestra los procesos que pertenecen al usuario actual.
ps -aux
Muestra la información detallada de todos los procesos en ejecución (a para todos los procesos, u para los procesos del usuario y x para los procesos que no son de terminal).
Los campos más importantes mostrados por ps son:
-
USER - usuario dueño del proceso.
-
PID - número identificador del proceso.
-
%CPU - porcentaje de uso del microprocesador por parte de este proceso.
-
%MEM - porcentaje de la memoria principal usada por el proceso.
-
VSZ - tamaño virtual del proceso (lo que ocuparía en la memoria principal si todo él estuviera cargado, pero en la práctica en la memoria principal sólo se mantiene la parte que necesita procesarse en el momento).
-
RSS - tamaño del proceso en la memoria principal del sistema (generalmente son KBytes, cuando no lo sea, se indicará con una M detrás del tamaño).
-
TTY - número de terminal (consola) desde el que el proceso fue lanzado. Si no aparece, probablemente se ejecutó durante el arranque del sistema.
-
STAT - estado del proceso (R run, T stopped, S signal wait...).
-
START - cuándo fue iniciado el proceso.
-
TIME - el tiempo de CPU (procesador) que ha usado el proceso.
-
COMMAND - el comando que inició el proceso.
top
Es la versión a tiempo real de ps. Si lo ejecutamos en una terminal y sin opciones, aparecerá arriba información del sistema: usuarios, hora, información del tiempo de funcionamiento de la máquina, número de procesos, uso de CPU, uso de memoria y uso del swap. A continuación tenemos una lista de procesos similar a la que nos mostraba ps con la diferencia de que esta se actualiza periódicamente, permitiéndonos ver la evolución del estado de los procesos.
top
También podemos filtrar la información de salida por usuario:
top –u usuario
htop
Es la versión mejorada del comando top, con barras que muestran el estado de la CPU y los procesos. Necesita instalación previa.
apt-get install htop htop
iotop
Muestra a tiempo real la lectura y escritura en disco de cada proceso. Mediante las flechas derecha e izquierda cambiamos la columna por la que deseamos ordenar la lista. Con la tecla "a" se ordena de mayor a menor la columna.
iotop
fuser
Este comando ofrece los PIDs de los procesos que están utilizando un archivo en concreto.
fuser -m /dev/sda1
Tareas en primer y segundo plano
El control de tareas es una interesante característica que Bash nos ofrece. Así, cada proceso que se ejecute tiene asignado un número de tarea por parte de Bash (diferente al PID).
Las tareas que podemos ejecutar desde una línea de comandos pueden estar en primer o segundo plano, y de hecho pueden pasar de un estado a otro. Una terminal concreta está bloqueada cuando un proceso está en primer plano, mientras que si está en segundo plano la terminal está libre y podemos teclear comandos en ella. Esto está más relacionado con la terminal (Bash) en sí que con el concepto de proceso o tarea. Normalmente al ejecutar un comando no recuperamos el prompt hasta que éste no termina. La necesidad que nos surge es poder usar esa terminal sin abrir otra nueva a la vez que nuestro comando sigue haciendo lo que tenga que hacer.
Cada vez que al presionar INTRO hay novedades en la gestión de tareas, Bash nos informa de ello, mostrando entre corchetes el número de tarea y qué ha ocurrido con ella.
Por defecto, una tarea en segundo plano enviará su salida a la terminal actual. Podemos usar las redirecciones para evitarlo.
&
En Bash, ponemos un proceso en segundo plano añadiendo un “&” al final del comando. El comando se ejecuta mientras la terminal queda libre. Una vez ejecutada la tarea nos indica entre corchetes el número de tarea y a continuación el PID del proceso. Si la terminal se cerrar el proceso se terminaría también.
$ sleep 10 & [1] 6190 $ (tras 10 segundos presionamos INTRO) [1]+ Done sleep 10
nohup
Sirve para ejecutar cualquier comando sin que éste dependa de la terminal. Para ello hay que indicar las redirecciones de entrada y salida estándar, si no el mismo programará te indicará cuáles está utilizando.
nohup sleep 10 &> salida.log & nohup ls –R /etc &> salida.log
jobs
Muestra una lista de los trabajos en ejecución en la terminal.
jobs
fg
Con este comando recuperamos una tarea de segundo plano o parada a primer plano, para ello deberemos seguirlo de %N, donde N es el número de tarea que queremos recuperar.
fg %2
Ctrl + Z
Con esta combinación detendremos la tarea que se encuentre actualmente en primer plano.
$ ls / -r ... (Ctrl + Z) [2]+ Detenido ls / -r
bg
Con este comando pasamos una tarea parada a segundo plano y se activaría para continuar su ejecución, deberemos seguirlo de %N, donde N es el número de tarea que queremos activar.
bg %2
Ctrl + C
Cancela totalmente una tarea o proceso que se encuentre en primer plano ejecutándose actualmente.
kill
Este comando sirve para enviar una señal a un proceso, deberemos indicar la señal enviada y el PID del proceso al que deseamos enviar la señal. El tipo de señal se indica mediante una palabra asociada al mismo o con un código numérico en aquellas señales más utilizadas. Los más conocidos son:
TERM (15): Manda una señal para terminar de una manera limpia un proceso, esperando a que guarde sus datos, para ello el proceso debe de estar preparado para aceptar este tipo de señal. Esta será la señal por defecto si no se indica ninguna.
kill 9156 kill –TERM 9156 kill -15 9156
KILL (9): Manda una señal de terminar incondicionalmente, sin esperar a que el proceso guarde sus datos.
kill –KILL 9156 kill –9 9156
STOP: Manda una señal de detener a un proceso.
kill –STOP 9156
Si en lugar de indicar un PID se puede indicar -1 para que afecte a todos los procesos al alcance del usuario. Si somos root detendremos el sistema.
kill –9 -1
nice / renice
Sirve para modificar la prioridad por defecto de los procesos del sistema. La prioridad va desde el valor -20 (priodad más favorable) al valor 19 (prioridad menos favorable).
La prioridad de un proceso la podemos conocer mediante la columna NI del siguiente comando:
ps –l ps -axl
Con el comando sin parámetros obtenemos el valor por defecto de la prioridad con la que ejecutamos los comandos:
nice
Para lanzar un proceso con una determinada prioridad utilizamos el siguiente comando:
nice –n 15 sleep 10 nice –n -8 sleep 10
Para modificar la prioridad de un proceso que ya está en ejecución utilizamos su PID:
renice -15 8180 renice 10 8182
Monitorización de memoria
free
Proporciona información relativa a la cantidad de memoria física y swap, tanto libre como usada en el sistema, el estado de los buffers y la memoria caché utilizada por el núcleo. Con el parámetro –m se muestra en megabytes.
free -m
pmap
Proporciona información referente a la utilización de memoria por parte de un determinado proceso. Hay que indicarle el PID del proceso.
pmap 1732
vmstat
Informe gráfico que contiene las estadísticas de la memoria.
vmstat
/proc/meminfo
Fichero de texto con la información de la memoria a tiempo real.
cat /proc/meminfo
Enlaces transversales de Book para Gestión de procesos y memoria
Gestión de procesos y memoria escrito por Rafa Morales está protegido por una licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional