Administración de Sistemas Informáticos en Red Implantación de Sistemas Operativos
UNIDAD 7: GESTION DE PROCESOS
1.- INTRODUCCION:
Un proceso es un programa en ejecución. Un proceso, a su vez, es separado en tareas,
cada una con sus propios derechos y responsabilidades, aunque, normalmente, los
conceptos de proceso y tarea se utilizan como sinónimos, haciendo siempre referencia a los
programas que se están ejecutando.
Linux debe asignar equitativamente los diferentes recursos del sistema a los procesos que
se estén ejecutando, debiendo disponer de información actualizada de cada uno de ellos.
Linux posee, para cada proceso, de una estructura de tarea (task_struct), donde se
almacenan los datos relativos a dicho proceso (nombre, identificador, estado, contador de
programa, parámetros...). Existirá una estructura de tarea para cada proceso, accesibles
mediante el vector de tareas, un array que contiene el puntero a cada una de las task_struct
que existen en el sistema. Esto significa que el máximo número de procesos en el sistema
es limitado por el tamaño del vector de procesos que, por defecto, tiene 512 entradas.
Cada proceso posee su PID o identificador de proceso, que es un número que el sistema
asocia a cada proceso que se lanza. Linux mantiene una jerarquía de procesos, de forma
que cada proceso que se lanza (proceso hijo) es creado por otro (proceso padre), y a su
vez, el proceso hijo puede lanzar nuevos procesos que serán sus hijos. Todos los procesos
dependen jerárquicamente del proceso init, cuyo PID es 1, siendo el padre de todos ellos.
2.- COMANDOS DE CONSULTA:
En este apartado conoceremos los comandos utilizados para determinar y conocer los
procesos que se están ejecutando en nuestra máquina.
ps: Muestra una lista de los procesos que se están ejecutando en el sistema. Por defecto
aparecen los procesos lanzados por el usuario en la consola actual. Su aspecto es el
siguiente:
PID TTY TIME CMD
1240 vc/1 00:00:00 login
1285 vc/1 00:00:00 bash
1355 vc/1 00:00:00 ps
PID El número de identificación del proceso.
TTY El número de consola virtual o terminal desde el que ha sido lanzado.
TIME Tiempo total que el proceso ha utilizado la CPU desde su ejecución.
CMD Nombre del proceso que se está ejecutando.
Las opciones más importantes que se pueden utilizar con este comando son las que
pasamos a detallar:
ps -a Muestra todos los procesos de todos los usuarios del sistema, con independencia
de la consola en que se ejecuten.
ps -A Muestra todos lo procesos que se ejecutan en el sistema, aunque no hayan sido
lanzados a través de las consolas.
ps r Muestra exclusivamente los procesos que se encuentren en estado Runnable de
todos los usuarios.
ps f Muestra los procesos en formato arbóreo, determinando la dependencia entre
ellos.
1
Administración de Sistemas Informáticos en Red Implantación de Sistemas Operativos
ps t3 Muestra los procesos ejecutados en el terminal especificado, en este caso el 3.
ps l Es el formato largo del comando ps. Los datos más destacados son:
UID Usuario que ejecuta el proceso.
PPID El número de identificación del proceso padre.
PRI Prioridad del proceso.
NI El valor nice del proceso (estudiado más adelante).
VSZ Tamaño del proceso expresado en Kb.
RSS Cantidad total de memoria utilizada por el proceso.
STAT El estado del proceso. Pueden existir los siguientes casos:
R Runnable (procesos en ejecución). Son procesos que se están
ejecutando o están en cola, preparados para ser asignados a la CPU.
S Sleeping (procesos interrumpibles). Son procesos en espera que pueden
ser interrumpidos por señales.
D Uninterruptible Sleep (procesos ininterrumpibles): Son procesos que
están esperando ciertas condiciones hardware y no pueden ser
interrumpidos bajo ninguna circunstancia.
T Traced o Stopped (procesos detenidos). Son procesos que han sido
parados por recibir una señal.
Z Zombie. Son procesos detenidos que, por alguna razón, todavía tienen
su task_struct en el vector de tareas. Son procesos muertos.
ps u Otro formato largo en el que destacamos los siguientes datos:
USER Nombre del usuario que ejecuta el proceso.
%CPU Porcentaje de tiempo de CPU que utiliza el proceso.
%MEM Porcentaje de memoria que ocupa el proceso.
START Hora de comienzo de ejecución del proceso.
top: Muestra una lista de los procesos que se están ejecutando en el sistema pero en
tiempo real, es decir, la pantalla se va actualizando para mostrar, de forma actualizada, la
información relativa a los procesos. Se incluyen los siguientes datos por defecto:
1ª línea: Hora actual, tiempo que lleva encendido el sistema, número de usuarios y el
número medio de procesos preparados para ser ejecutados en los últimos 1, 5 y 15 minutos.
2ª línea: Número total de procesos diferenciando, posteriormente, entre los que se
encuentran en espera, ejecutándose, zombie y detenidos.
3ª línea: Porcentaje de tiempo de CPU utilizado por el usuario, el sistema y el que se
encuentra disponible.
4ª línea: Cantidad de memoria total en el sistema, la que está siendo utilizada, la que queda
libre, la que se emplea como memoria compartida y la utilizada para buffers.
5ª línea: El espacio de la partición swap, junto con la cantidad utilizada y la que queda libre.
A continuación aparece una lista con los procesos que incluye la siguiente información:
PID El número de identificación del proceso.
USER El nombre del usuario.
PRI Prioridad del proceso.
NI El valor nice del proceso.
SIZE Tamaño del proceso expresado en Kb.
RSS Cantidad total de memoria utilizada por el proceso.
SHARE Cantidad de memoria compartida utilizada por el proceso.
STAT El estado del proceso.
%CPU Porcentaje de tiempo de CPU que utiliza el proceso.
2
Administración de Sistemas Informáticos en Red Implantación de Sistemas Operativos
%MEM Porcentaje de memoria que ocupa el proceso.
TIME Tiempo total que el proceso ha utilizado la CPU desde su ejecución.
COMMAND Nombre del proceso que se está ejecutando.
Los comandos que se pueden ejecutar directamente sobre esta pantalla son:
q Sale de top.
s Determina el retardo, en segundos, entre cada actualización de pantalla. Por
defecto se encuentra activado a 5 segundos.
f Permite determinar los datos que se muestran de cada proceso. Aparece una
lista en la que con un (*) se especifican los datos activos. Simplemente
pulsando la letra correspondiente podemos activar o desactivar la visualización
de cada uno de ellos.
Algunos de los datos que se podrían incluir a los procesos activos son:
PPID El número de identificación del proceso padre.
UID El número de identificación del propietario del proceso.
TSIZE El tamaño del código del proceso.
DSIZE El tamaño de los datos y la pila asociada a cada proceso.
TRS El tamaño de la parte residente del proceso.
pstree: Muestra todos los procesos ejecutados en formato de estructura de árbol,
independientemente del usuario que los haya lanzado y ordenados alfabéticamente. Si
indicamos, después del comando, el nombre de un usuario, únicamente se listarán los
procesos ejecutados por dicho usuario. Los procesos duplicados se muestran en formato
comprimido, colocándose entre corchetes y con un número que indica el número de veces
que se repite.
3.- PRIORIDAD:
nice: Ejecuta un proceso con una prioridad asociada. El formato del comando es:
nice -prioridad programa
La prioridad se encuentra en el rango comprendido entre -20 y 19, siendo -20 la mayor
prioridad y 19 la menor. Utilicemos como ejemplo el programa yes, que simplemente
presenta en pantalla, de forma permanente, el mensaje “y” de afirmación:
nice -10 yes (Se ejecuta yes con prioridad 10).
nice --5 yes (Se ejecuta yes con prioridad -5).
Para finalizar la ejecución del programa yes utilizar la combinación de teclas Ctrl-C.
renice: Modifica la prioridad de los procesos en ejecución. Su formato es:
renice prioridad PID
renice -5 308 (El proceso cuyo PID es el 308 modifica su prioridad a -5)
4.- CONTROL DE TAREAS:
Los procesos que se ejecutan pueden estar en primer plano (foreground) y segundo plano
(background). Unicamente puede haber un proceso foreground, que es el que interactúa con
el usuario, a través del teclado y la pantalla. Los procesos background se ejecutan sin
3
Administración de Sistemas Informáticos en Red Implantación de Sistemas Operativos
ningún tipo de interacción, como puede ser la compilación de programas o la compresión de
ficheros. Es interesante, por lo tanto, saber lanzar este tipo de programas en segundo plano,
para dejar el ordenador en condiciones de ejecutar otro programa.
Proceso suspendido: Es un proceso temporalmente parado que puede continuar
ejecutándose justo donde se dejó, sin necesidad de reiniciarlo. Para suspender un
proceso se utiliza la combinación de teclas Ctrl+Z.
Proceso interrumpido: Es un proceso que muere y que deja de estar en memoria y de
utilizar recursos del ordenador. No puede continuar su ejecución sino que deberá ser
lanzado otra vez para volver a realizar sus tareas. Utilizaremos la combinación Ctrl+C.
Los comandos relacionados con el control de tareas es el siguiente:
fg %numproc Devuelve un proceso al primer plano. El número de proceso se puede
comprobar mediante el comando jobs. Si no se especifica número de
proceso se coge el proceso por defecto, que es el que viene marcado
por el símbolo „+‟ en la lista ofrecida por el comando jobs.
bg %numproc Manda a un proceso suspendido ejecutarse en segundo plano.
kill %numproc Termina la ejecución de un proceso en segundo plano. Se puede
kill PID especificar el número de proceso o el PID.
jobs Muestra una lista con los procesos que en ese momento están en
ejecución o suspendidos. Cada proceso tendrá su número
identificativo, marcando, mediante el símbolo „+‟ el proceso por defecto.
& Este símbolo, colocado al final de la línea de comandos, hace que
dicho proceso se ejecute directamente en segundo plano.
Para comprobar el funcionamiento de estas instrucciones ejecutaremos el comando yes.
Podemos suspender el proceso pulsando Ctrl+Z, apareciendo el siguiente mensaje:
[1]+ Stopped yes
En estos momentos el proceso está suspendido y podemos ejecutar cualquier otra tarea
sobre el mismo terminal. En todo momento el comando jobs nos informará de los procesos
en ejecución. Utilizando fg ó fg %1 volveremos a colocar el proceso yes en primer plano.
Posteriormente lo detendremos mediante Ctrl+C.
Ejecutemos de nuevo el comando yes, pero utilizando la siguiente línea de comandos:
yes > /dev/null
Esta instrucción ejecuta el comando yes direccionando el resultado a null, por lo que no
tendremos respuesta en pantalla. Esto lo hacemos para poder realizar de forma correcta el
siguiente ejercicio.
Una vez que se está ejecutando el proceso lo podemos suspender utilizando la combinación
de teclas Ctrl+Z. En este momento podemos ejecutar cualquier otro comando, estando en la
misma situación que en el ejercicio anterior. Ahora llevemos el proceso a segundo plano,
mediante bg ó bg %1. Ahora el proceso se está ejecutando en segundo plano y
simultáneamente podemos ejecutar otro.
Para finalizar el proceso tenemos dos opciones: Directamente ejecutar kill %1, o bien pasar
el proceso a primer plano, mediante fg y terminarlo con Ctrl+C.
Recordemos que el proceso anterior lo pudimos ejecutar directamente en segundo plano
mediante el comando yes > /dev/null &.
4