07 Capitulo7
07 Capitulo7
07 Capitulo7
procesos Linux
Generalidades
Procesos (y práctica)
Ejercicio de
Administración y control de procesos Linux
laboratorio
7.1 Procesos
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder realizar lo siguiente:
Procesos
Un proceso (principal) existente duplica su propio espacio de direcciones (bifurcación) para crear
una nueva estructura de proceso (secundaria). Se asigna una identificación de proceso (PID) única a
cada proceso nuevo para su rastreo y por motivos de seguridad. La PID y la identificación del proceso
principal (PPID) son elementos del entorno del proceso nuevo. Cualquier proceso puede crear un
proceso secundario. Todos los procesos derivan del primer proceso de sistemas, que es systemd(1)
en un sistema Red Hat Enterprise Linux 7.
En un sistema operativo de funciones múltiples, cada CPU (o núcleo de CPU) puede trabajar en un
proceso en un momento dado. Mientras se ejecuta un proceso, sus requisitos inmediatos en cuanto
a asignación de recursos y tiempo de la CPU cambian. Los procesos reciben un estado, que cambia
en la medida en que las circunstancias así lo exijan.
Los estados de los procesos de Linux se ilustran en el diagrama anterior y se describen en la siguiente
tabla.
Estados de los procesos de Linux
El comando ps se utiliza para elaborar una lista de los procesos actuales. El comando puede
proporcionar información detallada de los procesos, que incluye:
la identificación del usuario (UID) que determina los privilegios del proceso;
Importante
opciones UNIX (POSIX), que pueden agruparse y deben estar precedidas por un guión;
Una lista de visualización común (opciones aux) muestra todos los procesos, con columnas que
serán de interés para los usuarios, e incluye procesos sin una terminal de control. Una lista extensa
(opciones lax) proporciona detalles más técnicos, pero puede visualizarse más rápidamente porque
no realiza la búsqueda de nombre de usuario. La sintaxis de UNIX similar usa las opciones -efpara la
visualización de todos los procesos.
[student@serverX ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 51648 7504 ? Ss 17:45 0:03 /usr/lib/systemd/syst
root 2 0.0 0.0 0 0 ? S 17:45 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 17:45 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 17:45 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 17:45 0:00 [migration/0]
-- salida truncada --
[student@serverX ~]$ ps lax
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 51648 7504 ep_pol Ss ? 0:03 /usr/lib/systemd/
1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd]
1 0 3 2 20 0 0 0 smpboo S ? 0:00 [ksoftirqd/0]
1 0 5 2 0 -20 0 0 worker S< ? 0:00 [kworker/0:0H]
1 0 7 2 -100 - 0 0 smpboo S ? 0:00 [migration/0]
-- salida truncada --
[student@serverX ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:45 ? 00:00:03 /usr/lib/systemd/systemd --switched-ro
root 2 0 0 17:45 ? 00:00:00 [kthreadd]
root 3 2 0 17:45 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 17:45 ? 00:00:00 [kworker/0:0H]
root 7 2 0 17:45 ? 00:00:00 [migration/0]
-- salida truncada --
De manera predeterminada, el comando ps sin opciones selecciona todos los procesos que tienen
la misma identificación de usuario efectivo (EUID) que el usuario actual y que están asociados con la
misma terminal en la que se invocó ps.
Los procesos entre corchetes (normalmente en la parte superior) son subprocesos del
núcleo programados.
ps se muestra una vez. Utilice la opción top(1) para una visualización de procesos de
actualización repetitiva.
ps puede mostrar los resultados en formato de árbol para ver las relaciones de procesos
primarios y secundarios.
Referencias
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Arrastre y suelte los elementos en la celda junto a la respuesta correcta. Cada celda debe contener
una respuesta. Si usted desea modificar una respuesta, arrástrela a otra ubicación, o haga clic en
Restablecer para que la evaluación regrese a su configuración inicial.
Una vez que haya finalizado el cuestionario, haga clic en Check (verificar). Las respuestas correctas
tendrán un fondo azul y las respuestas incorrectas estarán tachadas. Si desea intentar de nuevo,
haga clic en Restablecer. Nota: Si tiene problemas para que la evaluación funcione por segunda vez,
intente actualizar el explorador. Haga clic en Mostrar Solución para ver todas las respuestas
correctas.
Descripción Estado
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder realizar lo siguiente:
Control de trabajos
Control de trabajos es una característica de la shell que permite ejecutar y administrar múltiples
comandos desde una sola instancia de shell.
Un trabajo está asociado con cada tubería ingresada en un shell prompt. Todos los procesos en
esa tubería son parte del trabajo y son miembros del mismo grupo de procesos. (Si se ingresa solo
un comando en un shell prompt, puede considerarse como una "tubería" mínima de un comando.
Ese comando sería el único miembro de ese trabajo).
Solo un trabajo puede leer entradas y señales generadas por el teclado desde una ventana de
terminal específica por vez. Los procesos que son parte de ese trabajo son procesos en primer
planode dicha terminal de control.
Cada terminal es su propia sesión, y puede tener un proceso en primer plano y procesos en
segundo plano independientes. Un trabajo es parte de exactamente una sesión, la que pertenece
a su terminal de control.
Cualquier comando o tubería puede iniciarse en segundo plano si se anexa el signo ampersand (&)
al final de la línea de comandos. La shell bash muestra un número de trabajo (exclusivo de la
sesión) y el identificador de proceso del proceso secundario nuevo. La shell no espera al proceso
secundario y vuelve a mostrar el shell prompt.
[student@serverX ~]$ sleep 10000 &
[1] 5947
[student@serverX ~]$
nota
Cuando se coloca una tubería en segundo plano con un signo ampersand, el identificador de
proceso del último comando en la tubería será el de salida. Todos los procesos de la tubería
continúan siendo miembros de ese trabajo.
[student@serverX ~]$ example_command | sort | mail -s "Sort output" &
[1] 5998
La shell bash realiza un seguimiento de trabajos, por sesión, en una tabla que se muestra con el
comando jobs.
[student@serverX ~]$ jobs
[1]+ Running sleep 10000 &
[student@serverX ~]$
Un trabajo en segundo plano se puede colocar en primer plano con el comando fg con su ID de
trabajo (%número de trabajo).
[student@serverX ~]$ fg %1
sleep 10000
_
Para enviar un proceso en primer plano a segundo plano, presione primero la solicitud de
suspensión generada por el teclado (Ctrl+z) en la terminal.
sleep 10000
^Z
[1]+ Stopped sleep 10000
[student@serverX ~]$
Para iniciar el proceso suspendido que se está ejecutando en segundo plano, utilice el comando bg
con la misma ID de trabajo.
[student@serverX ~]$ bg %1
[1]+ sleep 10000 &
[student@serverX ~]$
La shell emitirá una advertencia al usuario que intente salir de una ventana de terminal (sesión)
con trabajos suspendidos. Si el usuario vuelve a intentar salir de inmediato, los trabajos
suspendidos se anulan.
Referencias
Resultados:
Práctica de suspensión y reinicio de procesos de usuario
Inicie sesión como student en serverX. Comience en el directorio de inicio del estudiante.
1. Abra las dos ventanas de terminal, una al lado de la otra, para que puedan identificarse
como izquierda y derecha.
3. En la ventana derecha, use tail para confirmar que el proceso nuevo se escriba en el
archivo.
[student@serverX ~]$ tail -f ~/outfile
6. En la ventana izquierda, inicie dos o más procesos para adjuntar el mismo archivo de
salida. Reemplace "rock" por "paper" y, a continuación, por "scissors". Para que el proceso
esté en segundo plano en forma correcta, el conjunto de comando completo debe estar
entre paréntesis y debe finalizar con el signo "&".
[student@serverX ~]$ (while true; do echo -n "paper " >> ~/outfile; sleep 1; done) &
[student@serverX ~]$ (while true; do echo -n "scissors " >> ~/outfile; sleep 1; done) &
7. En la ventana izquierda, visualice los trabajos para ver los tres procesos que están en
"ejecución". En la ventana derecha, confirme que los tres procesos se estén adjuntando al
archivo.
[student@serverX ~]$ jobs
8. Use solo los comandos que aprendió anteriormente y suspenda el proceso "rock". En la
ventana izquierda, coloque en primer plano el trabajo, usando la ID de trabajo
determinada de la lista de trabajos y, luego, utilice Ctrl+z para suspenderlo. Confirme que
se haya detenido el proceso de "rock". En la ventana derecha, confirme que la salida de
"rock" ya no esté activa.
[student@serverX ~]$ jobs
[student@serverX ~]$ fg %number
[student@serverX ~]$ Ctrl+z
10. En la ventana izquierda, visualice el resto de los trabajos que usan ps. El trabajo
suspendido tiene el estado T. El otro trabajo que está en segundo plano está inactivo (S)
ya que ps está "en cpu" (R) mientras se muestra.
[student@serverX ~]$ ps j
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
4489 6223 6223 6223 pts/1 12918 Ss 1000 0:00 bash
4489 6237 6237 6237 pts/2 9782 Ss 1000 0:00 bash
6237 9782 9782 6237 pts/2 9782 S+ 1000 0:00 tail -f /home/student/o
7360 9856 7360 6223 pts/1 12918 T 1000 0:00 sleep 1
7395 12916 7395 6223 pts/1 12918 S 1000 0:00 sleep 1
6223 12918 12918 6223 pts/1 12918 R+ 1000 0:00 ps j
11. Detenga los dos trabajos restantes. En la ventana de la izquierda, coloque en primer plano
cualquier trabajo. Utilice Ctrl+c para finalizarlo. Repita con el trabajo restante. El trabajo
"detenido" provisoriamente se reinicia cuando pasa a primer plano. Confirme que no
queden trabajos y que se haya detenido la salida.
[student@serverX ~]$ fg %number
[student@serverX ~]$ Ctrl+c
[student@serverX ~]$ fg %number
[student@serverX ~]$ Ctrl+c
[student@serverX ~]$ jobs
12. En la ventana derecha, detenga el comando tail. Cierre las ventanas de terminal extra.
[student@serverX ~]$ Ctrl+c
7.5 Finalización de procesos
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder realizar lo siguiente:
Finalización de procesos
Una señal es la interrupción de software que se envía a un proceso. Indica eventos de informe a
un programa que está en ejecución. Los eventos que generan una señal pueden ser un error,
evento externo (por ejemplo, una solicitud de entrada o salida, o un temporizador vencido), o una
solicitud explícita (por ejemplo, el uso de un comando emisor de señal o secuencia de teclado).
La siguiente tabla enumera las señales fundamentales usadas por los administradores del sistema
para la administración de procesos de rutina. Puede referirse a las señales ya sea por su nombre
abreviado (HUP) o nombre propio (SIGHUP).
Señales fundamentales de administración de procesos
Número Nombre
Definición Propósito
de señal abreviado
Detener, no se
Suspende el proceso. No puede
19 STOP puede
bloquearse ni manipularse.
bloquear.
Los números de señal varían en las distintas plataformas de hardware de Linux, pero los nombres y
los significados de las señales están estandarizados. Para el uso del comando, se aconseja usar los
nombres de señal en lugar de los números. Los números analizados en esta sección son para los
sistemas Intel x86.
Cada señal tiene una acción predeterminada que, por lo general, es una de las siguientes:
Core: provoca que un programa guarde una imagen de la memoria (volcado central) y que,
a continuación, finalice.
Stop: provoca que un programa deje de ejecutarse (se suspenda) y espere para continuar
(se reinicie).
Los programas pueden estar preparados para señales de eventos esperadas mediante la
implementación de rutinas de controlador que ignoren, reemplacen o amplíen la acción
predeterminada de una señal.
Las señales pueden especificarse ya sea por nombre (e.g., -HUP o -SIGHUP) o número (e.g., -1). Los
usuarios pueden finalizar sus propios procesos, pero se necesitan privilegios de root para finalizar
procesos que son propiedad de otros usuarios.
El comando kill envía una señal a un proceso mediante una ID. A pesar de su nombre, el
comando kill puede usarse para enviar cualquier señal y no solo aquellas para finalizar
programas.
[student@serverX ~]$ kill PID
[student@serverX ~]$ kill -signal PID
[student@serverX ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
-- salida truncada --
Use la opción killall para enviar una señal a uno o más procesos que coincidan con los
criterios de selección, como un nombre de comando, procesos que sean propiedad de un
usuario específico o procesos de todo el sistema.
[student@serverX ~]$ killall command_pattern
[student@serverX ~]$ killall -signal command_pattern
[root@serverX ~]# killall -signal -u username command_pattern
El comando pkill, como killall, puede indicar varios procesos. El comando pkill usa criterios
de selección avanzados, que pueden incluir la combinación de:
UID: procesos que son propiedad de una cuenta de usuario de Linux, efectiva o
real.
GID: procesos que son propiedad de una cuenta de grupo de usuarios de Linux,
efectiva o real.
El comando w visualiza los usuarios que actualmente tienen una sesión iniciada en el sistema y sus
actividades acumuladas. Use las columnas TTY y FROM para determinar la ubicación del usuario.
Todos los usuarios tienen una terminal de control, que se enumera como pts/N mientras se
trabaja en una ventana de entorno gráfico (pseudo-terminal) o ttyN en una consola del sistema,
una consola alternativa o un dispositivo terminal conectado en forma directa. Los usuarios
remotos muestran su nombre de sistema de conexión en la columna FROM cuando usan la opción
-f.
[student@serverX ~]$ w -f
12:43:06 up 27 min, 5 users, load average: 0.03, 0.17, 0.66
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
student :0 :0 12:20 ?xdm? 1:10 0.16s gdm-session-wor
student pts/0 :0 12:20 2.00s 0.08s 0.01s w -f
root tty2 12:26 14:58 0.04s 0.04s -bash
bob tty3 12:28 14:42 0.02s 0.02s -bash
student pts/1 desktop2.example.12:41 1:07 0.03s 0.03s -bash
[student@serverX ~]$
Averigüe cuánto tiempo un usuario estuvo en el sistema con la hora de inicio de sesión. Para cada
sesión, los recursos de CPU consumidos por los trabajos actuales, incluidas las tareas en segundo
plano y los procesos secundarios, se encuentran en la columna JCPU. El consumo de CPU del
proceso de primer plano actual está en la columna PCPU.
Los usuarios pueden ser obligados a salir del sistema debido a infracciones contra la seguridad,
asignación excesiva de recursos o necesidades administrativas. Se espera que los usuarios salgan
de las aplicaciones innecesarias, cierren los intérpretes de comandos no usados y salgan de las
sesiones de inicio de sesión cuando se les solicite.
En caso de que se produzcan situaciones en que no es posible comunicarse con los usuarios o
tienen sesiones sin respuesta, consumo de recursos descontrolado o acceso al sistema
inadecuado, es probable que sus sesiones deban finalizarse en forma administrativa con las
señalizaciones.
Importante
Los procesos y las sesiones pueden señalizarse en forma individual o colectiva. Para finalizar todos
los procesos de un usuario, use el comando pkill. Debido a que el proceso inicial en una sesión de
inicio de sesión (líder de sesión) está diseñado para manipular las solicitudes de finalización de
sesión e ignorar las señales de teclado involuntarias, la finalización de todos los procesos e
intérpretes de comandos de inicio de sesión de un usuario requiere del uso de la señal SIGKILL.
[root@serverX ~]# pgrep -l -u bob
6964 bash
6998 sleep
6999 sleep
7000 sleep
[root@serverX ~]# pkill -SIGKILL -u bob
[root@serverX ~]# pgrep -l -u bob
[root@serverX ~]#
Cuando los procesos que requieren atención están en la misma sesión de inicio de sesión, es
probable que no sea necesario finalizar todos los procesos de un usuario. Determine la terminal de
control para la sesión con el comando w y, a continuación, finalice solo los procesos con hagan
referencia a la misma ID de terminal. A menos que se especifique SIGKILL, el líder de sesión (en
este caso, la shell de inicio de sesión bash) manipula y supera en forma correcta la solicitud de
finalización, pero finalizan todos los demás procesos de sesión.
[root@serverX ~]# pgrep -l -u bob
7391 bash
7426 sleep
7427 sleep
7428 sleep
[root@serverX ~]# w -h -u bob
bob tty3 18:37 5:04 0.03s 0.03s -bash
[root@serverX ~]# pkill -t tty3
[root@serverX ~]# pgrep -l -u bob
7391 bash
[root@serverX ~]# pkill -SIGKILL -t tty3
[root@serverX ~]# pgrep -l -u bob
[root@serverX ~]#
Puede aplicarse el mismo proceso selectivo de finalización con las relaciones de proceso principal
y secundario. Use el comando pstree para visualizar un árbol de proceso para el sistema o un solo
usuario. Use la PID del proceso principal para finalizar todos los procesos secundarios que haya
creado. Esta vez, la shell de inicio de sesión bash principal sobrevive porque la señal se dirige solo
a sus procesos secundarios.
[root@serverX ~]# pstree -p bob
bash(8391)─┬─sleep(8425)
├─sleep(8426)
└─sleep(8427)
[root@serverX ~]# pkill -P 8391
[root@serverX ~]# pgrep -l -u bob
bash(8391)
[root@serverX ~]# pkill -SIGKILL -P 8391
[root@serverX ~]# pgrep -l -u bob
bash(8391)
[root@serverX ~]#
Referencias
En este ejercicio de laboratorio, los estudiantes usarán secuencias del teclado y señales para
administrar y detener procesos.
Resultados:
Experiencia con la observación de resultados de iniciar y detener varios procesos de shell.
1. Abra dos ventanas de terminal, una al lado de la otra, para que puedan identificarse como
izquierda y derecha.
2. En la ventana izquierda, inicie tres procesos que adjunten texto de un archivo de salida en
intervalos de un segundo. Para que cada proceso esté en segundo plano en forma
correcta, el conjunto completo del comando debe estar entre paréntesis y finalizar con un
"&".
[student@serverX ~]$ (while true; do echo -n "game " >> ~/outfile; sleep 1; done) &
[student@serverX ~]$ (while true; do echo -n "set " >> ~/outfile; sleep 1; done) &
[student@serverX ~]$ (while true; do echo -n "match " >> ~/outfile; sleep 1; done) &
3. En la ventana derecha, use tail para confirmar que los tres procesos se adjunten al
archivo. En la ventana izquierda, visualice los trabajos para ver los tres procesos que están
en "ejecución".
[student@serverX ~]$ tail -f ~/outfile
[student@serverX ~]$ jobs
[1] Running ( while true; do
echo -n "game " >> ~/outfile; sleep 1;
done ) &
[2]- Running ( while true; do
echo -n "set " >> ~/outfile; sleep 1;
done ) &
[3]+ Running ( while true; do
echo -n "match " >> ~/outfile; sleep 1;
done ) &
4. Use las señales para suspender el proceso de "games". Confirme que se haya detenido el
proceso de "games". En la ventana derecha, confirme que la salida de "games" ya no esté
activa.
[student@serverX ~]$ kill -SIGSTOP %number
[student@serverX ~]$ jobs
5. Use las señales para finalizar el proceso de "set". Confirme que el proceso de "set" haya
desaparecido. En la ventana derecha, confirme que la salida de "set" ya no esté activa.
[student@serverX ~]$ kill -SIGTERM %number
[student@serverX ~]$ jobs
6. Use las señales para reanudar el proceso de "games". Confirme que el proceso de "games"
esté en ejecución. En la ventana derecha, confirme que la salida de "games" esté de nuevo
activa.
[student@serverX ~]$ kill -SIGCONT %number
[student@serverX ~]$ jobs
7. Finalice los dos trabajos restantes. Confirme que no queden trabajos y que se haya
detenido la salida. En la ventana izquierda, finalice el comando tail en la ventana derecha.
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder realizar lo siguiente:
El núcleo Linux calcula una métrica de promedio de carga como un promedio en movimiento
exponencial del número de carga, un conteo acumulativo de la CPU de solicitudes activas de
recursos del sistema.
Las solicitudes activas se cuentan desde las filas por CPU para subprocesos en ejecución y
subprocesos en espera de E/S, ya que el núcleo realiza el seguimiento de la actividad de
los recursos del proceso y los cambios de estado del proceso correspondiente.
El número de carga es un cálculo de rutina que se ejecuta cada cinco segundos de manera
predeterminada, que almacena y promedia las solicitudes activas en un número único
para todas las CPU.
Linux cuenta los procesos, y también los subprocesos individualmente, como tareas
separadas. Las filas de solicitudes de la CPU para subprocesos en ejecución (nr_running) y
subprocesos en espera de recursos de E/S (nr_iowait) lógicamente corresponden a
estados de procesos R (Ejecución) y D (Suspensión ininterrumpida). La espera de E/S
incluye la suspensión de tareas para las respuestas esperadas del disco y de la red.
El número de carga es un cálculo de conteo global, que totaliza la suma para todas las
CPU. Dado que las tareas que se retoman luego de una suspensión se pueden reprogramar
para distintas CPU, los conteos precisos por CPU son difíciles, pero se puede garantizar un
conteo acumulativo preciso. Los promedios de carga que se muestran representan a todas
las CPU.
Linux cuenta cada hiperproceso del núcleo físico de una CPU y microprocesador como
unidades de ejecución separadas, representadas lógicamente y tratadas como CPU
individuales. Cada CPU tiene filas de solicitudes independientes. Vista de /proc/cpuinfo
para la representación del núcleo de las CPU del sistema.
[student@serverX ~]$ grep "model name" /proc/cpuinfo
model name : Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
model name : Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
model name : Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
model name : Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
[student@serverX ~]$ grep "model name" /proc/cpuinfo | wc -l
4
Algunos sistemas UNIX solo tenían en cuenta la utilización de la CPU o la longitud de la fila
de ejecución para indicar la carga del sistema. Dado que un sistema con CPU inactivas
puede experimentar esperas excesivas debido a que el disco o los recursos están
ocupados, en el promedio de carga de Linux se tiene en consideración la E/S. Cuando haya
promedios altos de carga con actividad mínima de CPU, se debe examinar la actividad del
disco y de la red.
Dividir los valores promedios de carga que se muestran por el número de CPU lógicas en el
sistema. Un valor por debajo de 1 indica utilización de recursos satisfactoria y tiempos de
espera mínimos. Un valor por encima de 1 indica saturación de recursos y cierta cantidad
de tiempo de espera del servicio.
# From /proc/cpuinfo, system has four logical CPUs, so divide by 4:
# load average: 2.92, 4.48, 5.20
# divide by number of logical CPUs: 4 4 4
# ---- ---- ----
# per-CPU load average: 0.73 1.12 1.30
#
# This system's load average appears to be decreasing.
# With a load average of 2.92 on four CPUs, all CPUs were in use ~73% of the time.
# During the last 5 minutes, the system was overloaded by ~12%.
# During the last 15 minutes, the system was overloaded by ~30%.
Una fila de una CPU inactiva tiene número de carga 0. Cada subproceso listo y en espera
incrementa el contador en 1. Con un contador de fila total de 1, el recurso (CPU, disco o
red) está en uso, pero sin solicitudes en espera. Las solicitudes adicionales incrementan el
contador; sin embargo, como muchas solicitudes se pueden procesar en el período,
aumenta la utilizacióndel recurso, pero no los tiempos de espera.
Los procesos en suspensión para E/S debido a un disco o recurso de red ocupados se
incluyen en el contador y aumentan el promedio de carga. Mientras no haya una
indicación de utilización de la CPU, el contador de la fila continúa indicando que los
usuarios y programas están esperando los servicios del recurso.
Hasta que no se produce una saturación del recurso, un promedio de carga se mantendrá
por debajo de 1, dado que las tareas rara vez son encontradas en las filas de espera. El
promedio de carga solo aumenta cuando la saturación del recurso provoca que las
solicitudes se mantengan en fila y sean contadas por la rutina del cálculo de carga. Cuando
la utilización del recurso se aproxima al 100 %, cada solicitud adicional comienza a
experimentar un tiempo de espera del servicio.
El programa top es una vista dinámica de los procesos del sistema, que muestra un encabezado
del resumen seguido de un proceso o lista de subprocesos similares a la información de ps. A
diferencia del resultado estático de ps, top continuamente se actualiza a un intervalo configurable
y ofrece capacidades de reorganización, ordenado y resaltado de columnas. Las configuraciones
del usuario se pueden guardar y hacer persistentes.
La memoria virtual (VIRT) es toda la memoria que está utilizando el proceso, incluido el
conjunto residente, las bibliotecas compartidas y cualquier página de memoria asignada o
intercambiada. (Con la etiqueta VSZ en el comando ps).
La memoria residente (RES) es la memoria física que utiliza el proceso, incluido cualquier
objeto residente compartido. (Con la etiqueta RSS en el comando ps).
o D = Suspensión ininterrumpida
o R = En ejecución o ejecutable
o S = En suspensión
o T = Detenido o en seguimiento
o Z = Inerte
Tecla Propósito
l, t,
Alternar entre carga, subprocesos y líneas de encabezado de la memoria.
m
k (1) Eliminar un proceso. Cuando recibe un aviso, ingresar PID, luego signal.
r (1) Renice a un proceso. Cuando recibe un aviso, ingresar PID, luego nice_value.
q Salir.
(1)
Nota: No está disponible si top se inicia en modo seguro. Ver top(1).
Referencias
En este ejercicio de laboratorio, los estudiantes usarán el comando top para visualizar, clasificar y
detener procesos en forma dinámica.
Resultados
Practicar la administración de procesos en tiempo real.
Realice las siguientes tareas como student en la máquina que tiene instalado serverX. Ejecute lab
process101 setup en serverX a fin de prepararse para este ejercicio.
[student@serverX ~]$ lab process101 setup
1. Abra dos ventanas de terminal, una al lado de la otra, para que puedan identificarse como
izquierda y derecha. En la terminal derecha, ejecute la utilidad top. Modifique el tamaño
de la ventana para que sea lo más alta posible.
[student@serverX ~]$ top
Observe los promedios de carga. Por ejemplo, en una máquina virtual de una sola CPU, el
promedio de carga de un minuto actualmente es inferior al valor de 1. El valor observado puede
estar afectado por la contención del recurso desde otra máquina virtual o el host virtual.
Observe de nuevo el promedio de carga de un minuto, que todavía debería ser inferior a 1. Espere
un máximo de un minuto para permitir que el cálculo se adapte a la carga de trabajo nueva.
De nuevo, observe el promedio de carga de un minuto, que ahora debería ser superior a 1. Espere
un máximo de un minuto para permitir que el cálculo una vez más se adapte a la carga de trabajo
nueva.
10. Opcional: si esta máquina virtual tiene más de una CPU lógica, comience lentamente otras
instancias de process101 hasta que el promedio de carga de un minuto iguale o supere la
cantidad de CPU lógicas. Divida el valor del promedio de carga por la cantidad de CPU para
determinar el promedio de carga calculado por CPU.
11. Una vez que haya finalizado de observar los valores promedio de carga, finalice cada uno
de los procesos process101 desde top.
a. Presione k. Observe la petición que está debajo de los encabezados y arriba de las
columnas.
12. Repita el paso anterior para cada instancia de process101 restante. Confirme que no
quede ninguna instancia de process101 en top.
13. En la ventana derecha, presione q para salir de top. Cierre las ventanas de terminal extra.
7.9 Ejercicio de laboratorio: Monitoreo y administración de procesos de Linux
En este ejercicio de laboratorio, los estudiantes localizarán y administrarán los procesos que
utilizan la mayoría de los recursos en un sistema.
Resultados
Experiencia con el uso de top como herramienta de administración de procesos.
Ejecute lab processes setup como usuario root en serverX a fin de prepararse para este ejercicio.
[root@serverX ~]# lab processes setup
2. Observe la pantalla top. La pantalla predeterminada ordena los resultados por utilización
de la CPU (de mayor a menor). ¿Qué procesos están utilizando la mayoría del tiempo de la
CPU?
Presione M.
top - 12:57:38 up 2:11, 3 users, load average: 2.09, 1.70, 1.19
Tasks: 360 total, 5 running, 355 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.8 us, 0.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2043424 total, 896952 used, 1146472 free, 1740 buffers
KiB Swap: 4079612 total, 0 used, 4079612 free. 296280 cached Mem
Aparte de la shell GNOME predeterminada y de Xorg, busque un proceso con el nombre elephant.
6. Finalice top y vuelva a iniciarlo. Confirme que la nueva pantalla utilice la configuración
guardada; es decir, que la pantalla comience con el contenido ordenado por utilización de
memoria y con el uso de negrita desactivado.
7. Modifique la pantalla para que el contenido se ordene por utilización de la CPU una vez
más. Active el uso de negrita. Observe que solo las entradas de proceso Running o
Runnable(estado R) están en negrita. Guarde esta configuración.
8. Abra otra ventana de terminal si es necesario. Como usuario root, suspenda el proceso
hippo. En top, observe que el estado del proceso ahora es T.
[student@serverX ~]$ su -
Password: redhat
[root@serverX ~]# pkill -SIGSTOP hippo
11. Cuando termine de observar la pantalla, utilice la línea de comandos para finalizar los
procesos extras. Confirme que los procesos ya no se vean en top.
[root@serverX ~]# pkill elephant
[root@serverX ~]# pkill hippo
12. Verifique que la limpieza se realice correctamente; para ello, ejecute la secuencia de
comandos para calificar. De ser necesario, busque y termine los procesos incluidos en una
lista por la secuencia de comandos para calificar y repita dicha secuencia.
[root@serverX ~]# lab processes grade