103.5 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objetivo: |
103.5 Crear, monitorear y matar procesos |
Lección: |
1 de 2 |
Introducción
Cada vez que invocamos un comando, se inician uno o más procesos. Un administrador de sistemas bien entrenado no solo necesita crear procesos, sino también poder realizar un seguimiento de ellos y enviarles diferentes tipos de señales si es necesario. En este tema veremos el control del trabajos y cómo monitorear los procesos.
Control de trabajos
Los trabajos (Jobs) son
procesos que se han iniciado de forma
interactiva a través de un terminal,
enviados a un segundo plano y aún no han
finalizado la ejecución. Puede conocer
los trabajos activos (y su estado) en su
sistema Linux ejecutando jobs
:
$ jobs
El comando jobs
anterior
no produjo ningún resultado, lo que
significa que no hay trabajos activos en
este momento. Creemos nuestro primer
trabajo ejecutando un comando que tarde
un poco en finalizar la ejecución (el
comando sleep
con un
parámetro de 60
) y,
mientras se ejecuta, presione Ctrl+Z:
$ sleep 60 ^Z [1]+ Stopped sleep 60
La ejecución del comando se ha detenido (o, mejor dicho, suspendido) y el símbolo del sistema vuelve a estar disponible. Puede buscar trabajos por segunda vez y encontrará el suspendido:
$ jobs [1]+ Stopped sleep 60
Permítanos explicar el resultado:
[1]
-
Este número es el ID del trabajo y se puede utilizar, precedido por un símbolo de porcentaje (
%
), para cambiar el estado del trabajo mediante las utilidadesfg
,bg
ykill
(como se mostrará más adelante). +
-
El signo más indica el trabajo actual predeterminado (es decir, el último suspendido o enviado al segundo plano). El trabajo anterior está marcado con un signo menos (
-
). Cualquier otro trabajo anterior no está marcado. Stopped
-
Descripción del estado del trabajo.
sleep 60
-
El comando o trabajo en ejecución.
Con la opción -l
, los
trabajos también mostrarán la ID del
proceso (PID) justo antes del estado:
$ jobs -l [1]+ 1114 Stopped sleep 60
Las opciones posibles restantes de trabajos son:
-n
-
Lista solo los procesos que han cambiado de estado desde la última notificación. El estado posible incluye,
Running
,Stopped
,Terminated
oDone
. -p
-
Lista los IDs de procesos.
-r
-
Lista solo los procesos en ejecución.
-s
-
Lista solamente los trabajos detenidos (o suspendidos).
Note
|
Recuerde, un trabajo tiene un ID de trabajo y un ID de proceso (PID). |
Especificaciones de trabajos
El comando jobs
, así
como otras utilidades como fg
,
bg
y kill
(que verá en la siguiente sección)
necesitan una especificación de
trabajo (o jobspec
) para
actuar sobre un trabajo en particular.
Como acabamos de ver, esto puede ser,
y normalmente es, el ID del trabajo
precedido por %
. Sin
embargo, otras especificaciones de
trabajo también son posibles. Echemos
un vistazo a ellos:
%n
-
Trabajo cuyo número de identificación es
n
:$ jobs %1 [1]+ Stopped sleep 60
%str
-
Trabajo cuya línea de comando comienza con
str
:$ jobs %sl [1]+ Stopped sleep 60
%?str
-
Trabajo cuya línea de comando contiene
str
:$ jobs %?le [1]+ Stopped sleep 60
%+
o%%
-
Trabajo actual (el último que se inició en segundo plano o suspendido del primer plano):
$ jobs %+ [1]+ Stopped sleep 60
%-
-
Trabajo anterior (el que era
% +
antes del predeterminado, el actual):$ jobs %- [1]+ Stopped sleep 60
En nuestro caso, dado que solo hay un trabajo, es actual y anterior.
Estado del trabajo: suspensión, primer plano y segundo plano
Una vez que un trabajo está en segundo plano o ha sido suspendido, podemos hacer cualquiera de estas tres cosas:
-
Llevarlo al primer plano con
fg
:$ fg %1 sleep 60
fg
mueve el trabajo especificado al primer plano y lo convierte en el trabajo actual. Ahora podemos esperar hasta que termine, detenerlo nuevamente con Ctrl+Z o terminarlo con Ctrl+C. -
Llevarlo a un segundo plano con
bg
(antes hay que volver a pararlo con Ctrl+Z):$ bg %1 [1]+ sleep 60 &
Una vez en segundo plano, el trabajo se puede volver a poner en primer plano con
fg
o matar (ver más abajo). Tenga en cuenta el signo (&
) que significa que el trabajo se ha enviado a segundo plano. De hecho, también puede usar el signo y comenzar un proceso directamente en segundo plano:$ sleep 100 & [2] 970
Junto con el ID de trabajo del nuevo trabajo (
[2]
), ahora también obtenemos su ID de proceso (970
). Ahora ambos trabajos se ejecutan en segundo plano:$ jobs [1]- Running sleep 60 & [2]+ Running sleep 100 &
Un poco más tarde, el primer trabajo finaliza la ejecución:
$ jobs [1]- Done sleep 60 [2]+ Running sleep 100 &
-
Termine con una señal
SIGTERM
conkill
:$ kill %2
Para asegurarse de que el trabajo ha finalizado, ejecute
jobs
nuevamente:$ jobs [2]+ Terminated sleep 100
Note
|
Si no se especifica ningún
trabajo, |
Trabajos
separados: nohup
Los trabajos que hemos visto en las
secciones anteriores se adjuntaron a
la sesión del usuario que los invocó.
Eso significa que si la sesión se
termina, los trabajos desaparecen. Sin
embargo, es posible separar los
trabajos de las sesiones y hacer que
se ejecuten incluso después de cerrar
la sesión. Esto se logra con el
comando nohup
(“no
hangup”). La sintaxis es la siguiente:
nohup COMMAND &
Recuerde, el &
envía el proceso a un segundo plano y
libera el terminal en el que está
trabajando.
Separemos el trabajo en segundo plano
ping localhost
de la
sesión actual:
$ nohup ping localhost & [1] 1251 $ nohup: ignoring input and appending output to 'nohup.out' ^C
La salida nos muestra la ID del
trabajo ([1]
) y el PID (1251
),
seguido de un mensaje que nos informa
sobre el archivo nohup.out
.
Este es el archivo predeterminado
donde se guardarán stdout
y stderr
. Ahora podemos
presionar Ctrl+C
para liberar el símbolo del sistema,
cerrar la sesión, iniciar otro como root
y usar tail -f
para
verificar si el comando se está
ejecutando y la salida se está
escribiendo en el archivo
predeterminado:
$ exit logout $ tail -f /home/carol/nohup.out 64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.070 ms 64 bytes from localhost (::1): icmp_seq=4 ttl=64 time=0.068 ms 64 bytes from localhost (::1): icmp_seq=5 ttl=64 time=0.070 ms ^C
Tip
|
En lugar de utilizar el |
Si queremos matar el proceso, debemos especificar su PID:
# kill 1251
Monitoreo de procesos
Un proceso o tarea es una instancia de un programa en ejecución. Por lo tanto, se crean nuevos procesos cada vez que escribe comandos en el terminal.
El comando watch
ejecuta
un programa periódicamente (2 segundos
por defecto) y nos permite mirar
el cambio de salida del programa con el
tiempo. Por ejemplo, podemos monitorear
cómo cambia el promedio de carga a
medida que se ejecutan más procesos
escribiendo watch uptime
:
Every 2.0s: uptime debian: Tue Aug 20 23:31:27 2019 23:31:27 up 21 min, 1 user, load average: 0.00, 0.00, 0.00
El comando se ejecuta hasta que se
interrumpe, por lo que deberíamos
detenerlo con Ctrl+C.
Obtenemos dos líneas como salida: la
primera corresponde a watch
y nos dice con qué frecuencia se
ejecutará el comando (Every 2.0s:
uptime
), qué comando/programa
mirar (uptime
) así como el
nombre de host y fecha (debian:
mar 20 de agosto 23:31:27 2019
).
La segunda línea de salida es el tiempo
de actividad e incluye la hora (23:31:27
),
cuánto tiempo ha estado activo el
sistema (up 21 min
), el
número de usuarios activos (1
usuario
) y carga promedio del
sistema o número de procesos en
ejecución o en estado de espera durante
los últimos 1, 5 y 15 minutos (promedio
de carga: 0.00, 0.00, 0.00
).
Del mismo modo, puede verificar el uso
de la memoria a medida que se crean
nuevos procesos con watch free
:
Every 2.0s: free debian: Tue Aug 20 23:43:37 2019 23:43:37 up 24 min, 1 user, load average: 0.00, 0.00, 0.00 total used free shared buff/cache available Mem: 16274868 493984 14729396 35064 1051488 15462040 Swap: 16777212 0 16777212
Para cambiar el intervalo de
actualización para watch
use las opciones -n
o --interval
más el número de segundos como en:
$ watch -n 5 free
Ahora el comando free
se
ejecutará cada 5 segundos.
Para obtener más información sobre las
opciones de uptime
, free
y watch
, consulte sus
páginas de manual.
Note
|
La información proporcionada
por |
Envío
de señales a procesos: kill
Cada proceso tiene un identificador
de proceso único o PID. Una forma de
averiguar el PID de un proceso es
mediante el comando pgrep
seguido del nombre del proceso:
$ pgrep sleep 1201
Note
|
El identificador de un
proceso también se puede
descubrir a través del
comando |
Similar a pgrep
, el
comando pkill
mata un
proceso basado en su nombre:
$ pkill sleep [1]+ Terminated sleep 60
Para matar varias instancias del
mismo proceso, se puede usar el
comando killall
:
$ sleep 60 & [1] 1246 $ sleep 70 & [2] 1247 $ killall sleep [1]- Terminated sleep 60 [2]+ Terminated sleep 70
Tanto pkill
como killall
funcionan de la misma manera que kill
en que envían una señal de terminación
a los procesos especificados. Si no se
proporciona ninguna señal, se envía el
valor predeterminado de SIGTERM
.
Sin embargo, kill
solo
toma un trabajo o una ID de proceso
como argumento.
Las señales se pueden especificar por:
-
Nombre:
$ kill -SIGHUP 1247
-
Número:
$ kill -1 1247
-
Opciones:
$ kill -s SIGHUP 1247
Para que kill
funcione
de manera similar a pkill
o killall
(y nos
ahorremos los comandos para descubrir
los PID primero) podemos usar la
sustitución de comandos:
$ kill -1 $(pgrep sleep)
Como ya debería saber, una sintaxis
alternativa es kill -1 `pgrep
sleep`
.
Tip
|
Para obtener una lista
exhaustiva de todas las
señales |
top
y ps
Cuando se trata de monitoreo de
procesos, dos herramientas invaluables
son top
y ps
.
Mientras que el primero produce
resultados dinámicamente, el segundo
lo hace estáticamente. En cualquier
caso, ambos son excelentes utilidades
para tener una visión integral de
todos los procesos en el sistema.
Interactuando
con top
Para invocar top
,
simplemente teclee top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
top
le permite al
usuario cierta interacción. Por
defecto, la salida se ordena por el
porcentaje de tiempo de CPU
utilizado por cada proceso en orden
descendente. Este comportamiento
puede modificarse presionando las
siguientes teclas desde top
:
M
-
Odena por uso de memoria.
N
-
Ordena por número de ID.
T
-
Ordena por tiempo de ejecución.
P
-
Ordena por porcentaje de uso en CPU.
Tip
|
Para cambiar entre orden
descendente/ascendente,
simplemente presione |
Otras teclas interesantes para
interactuar con top
son:
?
oh
-
Ayuda.
k
-
Mata un proceso.
top
solicitará que se elimine elPID
del proceso y que se envíe la señal (por defecto,SIGTERM
o15
). r
-
Cambiar la prioridad de un proceso (
renice
).top
le pedirá el valornice
. Los valores posibles oscilan entre -20 y 19, pero solo el superusuario (root
) puede establecerlo en un valor negativo o inferior al actual. u
-
Lista de procesos de un usuario en particular (de forma predeterminada se muestran los procesos de todos los usuarios).
c
-
Muestra las rutas absolutas de los programas y diferencia entre procesos de espacio de usuario y procesos de espacio de kernel (entre corchetes).
V
-
Vista de bosque/jerarquía de procesos.
t
ym
-
Cambia el aspecto de las lecturas de CPU y memoria respectivamente en un ciclo de cuatro etapas: las dos primeras pulsaciones muestran barras de progreso, la tercera oculta la barra y la cuarta la recupera.
W
-
Guardar ajustes de configuración en
~/.toprc
.
Tip
|
Una versión más elegante
y fácil de usar de |
Una
explicación de la salida de top
La salida top
se
divide en dos áreas: el área
resumen y el área de
tareas.
El
área de resumen en top
El área de resumen se compone de las cinco filas superiores y nos proporciona la siguiente información:
-
top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14
-
Hora actual (formato 24 horas):
11:20:29
-
Tiempo de actividad (cantidad de tiempo que el equipo ha estado activo y funcionando):
up 2:21
-
Número de usuarios conectados y promedio de carga de la CPU durante los últimos 1, 5 y 15 minutos, respectivamente:
load average: 0,11, 0,20, 0,14
-
-
Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie
(información sobre procesos)-
Número total de procesos en modo activo:
73 total
-
Ejecutándose (los ejecutados en el momento):
1 running
-
Durmiendo (aquellos que esperan reanudar la ejecución):
72 sleeping
-
Detenido (por una señal de control de trabajo):
0 stopped
-
Zombie (aquellos que han completado la ejecución pero todavía están esperando que su proceso padre los elimine de la tabla de procesos):
0 zombie
-
-
%Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
(porcentaje de tiempo de CPU empleado)-
Procesos de usuario:
0,0 us
-
Procesos de sistema/kernel:
0,4 sy
-
Procesos establecidos en un valor nice — cuanto mejor sea el valor, menor será la prioridad:
0,0 ni
-
Nada — tiempo de inactividad de la CPU:
99,7 id
-
Procesos en espera de operaciones de E/S:
0,0 wa
-
Procesos que sirven interrupciones de hardware — periféricos que envían las señales del procesador que requieren atención:
0,0 hi
-
Procesos que sirven interrupciones de software:
0,0 si
-
Los procesos que sirven las tareas de otras máquinas virtuales en un entorno virtual, por lo tanto, roban tiempo:
0,0 st
-
-
KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache
(Información de memoria en kilobytes)-
Monto total de memoria:
1020332 total
-
Memoria sin utilizar:
909492 free
-
Memoria en uso:
38796 used
-
La memoria intermedia (buffer) y almacenada en caché para evitar el acceso excesivo al disco:
72044 buff/cache
Observe cómo el
total
es la suma de los otros tres valores —free
,used
ybuff/cache
— (aproximadamente 1 GB en nuestro caso).
-
-
KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem
(Información memoria swap en kilobytes)-
La cantidad total de espacio de swap:
1046524 total
-
Espacio de swap no utilizado:
1046524 free
-
Espacio en uso de swap:
0 used
-
La cantidad de memoria de intercambio que se puede asignar a los procesos sin causar más intercambio:
873264 avail Mem
-
El
área de tareas en top
:
campos y columnas
Debajo del área de resumen, aparece el área de tareas, que incluye una serie de campos y columnas de información sobre los procesos en ejecución:
PID
-
Identificador de proceso.
USER
-
Usuario que emitió el comando que generó el proceso.
PR
-
Prioridad de proceso en el kernel.
NI
-
Valor nice del proceso. Los valores más bajos tienen mayor prioridad que los más altos.
VIRT
-
Cantidad total de memoria utilizada por el proceso (incluido la swap).
RES
-
Memoria RAM utilizada por el proceso.
SHR
-
Memoria compartida del proceso con otros procesos.
S
-
Estado del proceso. Los valores incluyen:
S
(suspensión interrumpible — esperando que termine un evento),R
(ejecutable — ya sea en ejecución o en la cola que se ejecutará) oZ
(procesos secundarios terminados en zombies cuyas estructuras de datos aún no se han eliminado de la tabla de procesos). %CPU
-
Porcentaje de CPU utilizado por el proceso.
%MEM
-
Porcentaje de RAM utilizada por el proceso, es decir, el valor
RES
expresado como porcentaje. TIME+
-
Tiempo total de actividad del proceso.
COMMAND
-
Nombre del comando/programa que generó el proceso..
Visualización
de procesos estáticos: ps
Como se dijo anteriormente, ps
muestra una instantánea de los
procesos. Para ver todos los
procesos con un terminal (tty),
escriba ps a
:
$ ps a PID TTY STAT TIME COMMAND 386 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux 424 tty7 Ssl+ 0:00 /usr/lib/xorg/Xorg :0 -seat seat0 (...) 655 pts/0 Ss 0:00 -bash 1186 pts/0 R+ 0:00 ps a (...)
Una
explicación de la sintaxis y salida de
la opción ps
Con respecto a las opciones, ps
puede aceptar tres estilos
diferentes: BSD, UNIX y GNU. Veamos
cómo funcionaría cada uno de estos
estilos al informar información
sobre un ID de proceso en
particular:
- BSD
-
Las opciones no siguen ningún guión inicial:
$ ps p 811 PID TTY STAT TIME COMMAND 811 pts/0 S 0:00 -su
- UNIX
-
Las opciones siguen un guión inicial:
$ ps -p 811 PID TTY TIME CMD 811 pts/0 00:00:00 bash
- GNU
-
Las opciones van seguidas de guiones dobles iniciales:
$ ps --pid 811 PID TTY TIME CMD 811 pts/0 00:00:00 bash
En los tres casos, ps
informa sobre el proceso cuyo PID
es 811
— en este caso,
bash
.
Del mismo modo, puede usar ps
para buscar los procesos iniciados
por un usuario en particular:
-
ps U carol
(BSD) -
ps -u carol
(UNIX) -
ps --user carol
(GNU)
Veamos los procesos iniciados por carol
:
$ ps U carol PID TTY STAT TIME COMMAND 811 pts/0 S 0:00 -su 898 pts/0 R+ 0:00 ps U carol
Comenzó dos procesos: bash
(-su
) y ps
(ps U carol
). La
columna STAT
nos dice
el estado del proceso (ver más
abajo).
Podemos obtener lo mejor de ps
combinando algunas de sus opciones.
Un comando muy útil (que produce una
salida similar a la de top
)
es ps aux
(estilo
BSD). En este caso, se muestran los
procesos de todos los shells (no
solo el actual). El significado de
los interruptores es el siguiente:
a
-
Mostrar procesos que están conectados a un
tty
o terminal. u
-
Mostrar formato orientado al usuario.
x
-
Mostrar procesos que no están conectados a un
tty
o terminal.
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 204504 6780 ? Ss 14:04 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 14:04 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 14:04 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 14:04 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 14:04 0:00 [rcu_sched] root 8 0.0 0.0 0 0 ? S 14:04 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 14:04 0:00 [migration/0] (...)
Permítanos explicar las columnas:
USER
-
Dueño del proceso.
PID
-
Identificador de proceso.
%CPU
-
Porcentaje de CPU utilizado.
%MEM
-
Porcentaje de memoria física utilizado.
VSZ
-
Memoria virtual de procesos en KiB.
RSS
-
Memoria física no intercambiada utilizada por el proceso en KiB.
TT
-
Terminal (
tty
) que controla el proceso. STAT
-
Código que representa el estado del proceso. Además de
S
,R
yZ
(que vimos al describir la salida detop
), otros valores posibles incluyen:D
(suspensión ininterrumpida — generalmente esperando E/S),T
(detenido — normalmente por una señal de control). Algunos modificadores adicionales incluyen:<
(alta prioridad — no agradable para otros procesos),N
(baja prioridad — agradable para otros procesos) o+
(en el grupo de procesos en primer plano). STARTED
-
Hora a la que comenzó el proceso.
TIME
-
Tiempo de CPU acumulado.
COMMAND
-
Comando que inició el proceso.
Ejercicios Guiados
-
oneko
es un programa divertido y agradable que muestra un gato persiguiendo el cursor del mouse. Si aún no está instalado en su sistema de escritorio, instálelo utilizando el administrador de paquetes de su distribución. Lo usaremos para estudiar el control del trabajo.-
Inicia el programa. ¿Cómo lo hace?
-
Mueva el cursor del mouse para ver cómo lo persigue el gato. Ahora suspenda el proceso. ¿Cómo hace eso? ¿Cuál es el resultado?
-
Compruebe cuántos trabajos tiene actualmente. ¿Qué escribe? ¿Cuál es el resultado?
-
Ahora envíelo al segundo plano especificando su ID de trabajo. ¿Cuál es el resultado? ¿Cómo puede saber que el trabajo se está ejecutando en segundo plano?
-
Finalmente, finalice el trabajo especificando su ID de trabajo. ¿Qué escribes?
-
-
Descubra los PID de todos los procesos generados por Apache HTTPD web server (
apache2
) con dos comandos diferentes:
-
Termine todos los procesos
apache2
sin usar sus PID y con dos comandos diferentes:
-
Suponga que tiene que terminar todas las instancias de
apache2
y no tiene tiempo para averiguar cuáles son sus PID. ¿Cómo lograría eso usandokill
con la señal predeterminadaSIGTERM
en una línea:
-
Inicie
top
e interactúe con él realizando lo siguiente:-
Mostrar una vista del bosque de procesos:
-
Muestra rutas completas de procesos que diferencian entre espacio de usuario y espacio de kernel:
-
-
Escriba el comando
ps
para mostrar todos los procesos iniciados por Apache HTTPD web server usuario (www-data
):-
Usando la sintaxis BSD:
-
Usando la sintaxis UNIX:
-
Usando la sintaxis de GNU:
-
Ejercicios Exploratorios
-
La señal
SIGHUP
puede usarse como una forma de reiniciar ciertos demonios. Con Apache HTTPD web server, por ejemplo, enviarSIGHUP
al proceso padre (el que comenzó coninit
) mata a sus hijos. Sin embargo, el padre vuelve a leer sus archivos de configuración, vuelve a abrir los archivos de registro y genera un nuevo conjunto de hijos. Realice las siguientes tareas:-
Inicie el servidor web:
-
Asegúrese de conocer el PID del proceso principal:
-
Haga que el servidor web Apache HTTPD se reinicie enviándole la señal
SIGHUP
al proceso principal:
-
Verifique que el padre no haya sido terminado y que se hayan generado nuevos hijos:
-
-
Aunque inicialmente estático, la salida de
ps
puede volverse dinámica combinandops
ywatch
. Supervisaremos Apache HTTPD web server para detectar nuevas conexiones. Antes de realizar las tareas descritas a continuación, se recomienda que lea la descripción de la directivaMaxConnectionsPerChild
en Apache MPM Common Directives.-
Agregue la directiva
MaxConnectionsPerChild
con un valor de1
en el archivo de configuración deapache2
— en Debian y derivados se encuentran en/etc/apache2/apache2.conf
; en la familia CentOS, en/etc/httpd/conf/httpd.conf
. No olvide reiniciarapache2
para que los cambios surtan efecto.
-
Escriba un comando que use
watch
,ps
ygrep
para las conexionesapache2
.
-
Ahora abra un navegador web o use un navegador de línea de comandos como
lynx
para establecer una conexión con el servidor web a través de su dirección IP. ¿Qué observa en la salida dewatch
?
-
-
Como has aprendido, por defecto,
top
clasifica las tareas por porcentaje de uso de CPU en orden descendente (los valores más altos en la parte superior). Este comportamiento se puede modificar con las teclas interactivasM
(uso de memoria),N
(identificador único del proceso),T
(tiempo de ejecución) yP
(porcentaje del tiempo de CPU). Sin embargo, también puede ordenar la lista de tareas a su gusto iniciandotop
con la opción-o
(para obtener más información, consulte la páginaman
de top). Ahora, realice las siguientes tareas:-
Inicie
top
para que las tareas se ordenen por uso de memoria:
-
Verifique que envió el comando correcto resaltando la columna de memoria:
-
-
ps
también tiene una opcióno
para especificar las columnas que desea que se muestren. Investigue esta opción y realice las siguientes tareas:-
Inicie
ps
para que solo se muestre información sobre usuario, porcentaje de memoria utilizada, porcentaje de tiempo de CPU utilizado y comando completo:
-
Ahora, ejecute
ps
para que la única información que se muestre sea la del usuario y el nombre de los programas que están utilizando:
-
Resumen
En esta lección has aprendido sobre jobs y control de jobs. Los hechos y conceptos importantes a tener en cuenta son:
-
Los trabajos son procesos que se envían en segundo plano.
-
Además de un ID de proceso, a los trabajos también se les asigna un ID de trabajo cuando se crean.
-
Para controlar trabajos, se requiere una especificación de trabajo (
jobspec
). -
Los trabajos se pueden poner en primer plano, enviar a un segundo plano, suspender y finalizar (o matar).
-
Se puede separar un trabajo del terminal y la sesión en la que se creó.
Asimismo, también hemos discutido el concepto de procesado y monitoreo de procesos. Las ideas más relevantes son:
-
Los procesos ejecutan programas.
-
Los procesos pueden ser monitoreados.
-
Las diferentes utilidades nos permiten encontrar el ID de proceso de los procesos y enviarles señales para finalizarlos.
-
Las señales se pueden especificar por nombre (por ejemplo,
-SIGTERM
), número (por ejemplo,-15
) u opción (por ejemplo,-s SIGTERM
). -
top
yps
son muy potentes cuando se trata de monitorear procesos. La salida del primero es dinámica y se actualiza constantemente; por otro lado,ps
revela la salida estáticamente.
Comandos utilizados en esta lección:
jobs
-
Mostrar trabajos activos y su estado.
sleep
-
Retraso por una cantidad de tiempo específica.
fg
-
Mover trabajos a primer plano.
bg
-
Mover trabajos a un segundo plano.
kill
-
Terminar trabajos.
nohup
-
Separar trabajos de la sesión/terminal.
exit
-
Salir del shell actual.
tail
-
Mostrar las líneas más recientes en un archivo.
watch
-
Ejecuta un comando repetidamente (ciclo de 2 segundos por defecto).
uptime
-
Mostrar cuánto tiempo ha estado funcionando el sistema, la cantidad de usuarios actuales y el promedio de carga del sistema.
free
-
Mostrar uso de memoria.
pgrep
-
Buscar la identificación del proceso basada en el nombre.
pidof
-
Buscar la identificación del proceso basada en el nombre.
pkill
-
Enviar señal para procesar por nombre.
killall
-
Eliminar procesos por nombre.
top
-
Mostrar procesos de Linux.
ps
-
Informar en un momento dado de los procesos actuales.
Respuestas a los ejercicios guiados
-
oneko
es un programa divertido y agradable que muestra un gato persiguiendo el cursor del mouse. Si aún no está instalado en su sistema de escritorio, instálelo utilizando el administrador de paquetes de su distribución. Lo usaremos para estudiar el control del trabajo.-
Inicie el programa. ¿Cómo lo hace?
Teclee
oneko
en la terminal. -
Mueva el cursor del mouse para ver cómo lo persigue el gato. Ahora suspenda el proceso. ¿Cómo hace eso? ¿Cuál es el resultado?
Presione
Ctrl+z
:[1]+ Stopped oneko
-
Compruebe cuántos trabajos tiene actualmente. ¿Qué escribe? ¿Cuál es el resultado?
$ jobs [1]+ Stopped oneko
-
Ahora envíelo al fondo especificando su ID de trabajo. ¿Cuál es el resultado? ¿Cómo puede saber que el trabajo se está ejecutando en segundo plano?
$ bg %1 [1]+ oneko &
El gato se mueve de nuevo.
-
Finalmente, finalice el trabajo especificando su ID de trabajo. ¿Qué escribe?
$ kill %1
-
-
Descubra los PID de todos los procesos generados por Apache HTTPD web server (
apache2
) con dos comandos diferentes:$ pgrep apache2
o
$ pidof apache2
-
Termine todos los procesos
apache2
sin usar sus PID y con dos comandos diferentes:$ pkill apache2
o
$ killall apache2
-
Suponga que tiene que terminar todas las instancias de
apache2
y no tiene tiempo para averiguar cuáles son sus PID. ¿Cómo lograría eso usandokill
con la señal predeterminadaSIGTERM
en una línea:$ kill $(pgrep apache2) $ kill `pgrep apache2`
o
$ kill $(pidof apache2) $ kill `pidof apache2`
NoteDado que
SIGTERM
(15
) es la señal predeterminada, no es necesario pasar ninguna opción parakill
. -
Inicie
top
e interactúe con él realizando lo siguiente:-
Mostrar una vista del bosque de procesos:
Presione
V
. -
Muestra rutas completas de procesos que diferencian entre espacio de usuario y espacio de kernel:
Presione
c
.
-
-
Escriba el comando
ps
para mostrar todos los procesos iniciados por Apache HTTPD web server usuario (www-data
):-
Usando la sintaxis BSD:
$ ps U www-data
-
Usando la sintaxis UNIX:
$ ps -u www-data
-
Usando la sintaxis de GNU:
$ ps --user www-data
-
Respuestas a ejercicios exploratorios
-
La señal
SIGHUP
puede usarse como una forma de reiniciar ciertos demonios. Con el Apache HTTPD web server, por ejemplo, enviarSIGHUP
al proceso padre (el que comenzó coninit
) mata a sus hijos. Sin embargo, el padre vuelve a leer sus archivos de configuración, vuelve a abrir los archivos de registro y genera un nuevo conjunto de hijos. Realice las siguientes tareas:-
Inicie el servidor web:
$ sudo systemctl start apache2
-
Asegúrese de conocer el PID del proceso principal:
$ ps aux | grep apache2
El proceso padre es el iniciado por el usuario
root
. En nuestro caso el que tiene PID1653
. -
Haga que el servidor web Apache HTTPD se reinicie enviándole la señal
SIGHUP
al proceso principal:$ kill -SIGHUP 1653
-
Verifique que el padre no haya sido terminado y que se hayan generado nuevos hijos:
$ ps aux | grep apache2
Ahora debería ver el proceso padre
apache2
junto con dos hijos nuevos.
-
-
Aunque inicialmente estático, la salida de
ps
puede volverse dinámica combinandops
ywatch
. Supervisaremos Apache HTTPD web server para detectar nuevas conexiones. Antes de realizar las tareas descritas a continuación, se recomienda que lea la descripción de la directivaMaxConnectionsPerChild
en Apache MPM Common Directives.-
Agregue la directiva
MaxConnectionsPerChild
con un valor de1
en el archivo de configuración deapache2
— en Debian y derivados se encuentran en/etc/apache2/apache2.conf
; en la familia CentOS, en/etc/httpd/conf/httpd.conf
. No olvide reiniciarapache2
para que los cambios surtan efecto.La línea a incluir en el archivo de configuración es
MaxConnectionsPerChild 1
. Una forma de reiniciar el servidor web es a través desudo systemctl restart apache2
. -
Escriba un comando que use
watch
,ps
ygrep
para las conexionesapache2
.$ watch 'ps aux | grep apache2'
o
$ watch "ps aux | grep apache2"
-
Ahora abra un navegador web o use un navegador de línea de comandos como
lynx
para establecer una conexión con el servidor web a través de su dirección IP. ¿Qué observas en la salida dewatch
?Uno de los procesos secundarios propiedad de
www-data
desaparece.
-
-
Como has aprendido, por defecto,
top
clasifica las tareas por porcentaje de uso de CPU en orden descendente (los valores más altos en la parte superior). Este comportamiento se puede modificar con las teclas interactivasM
(uso de memoria),N
(identificador único del proceso),T
(tiempo de ejecución) yP
(porcentaje del tiempo de CPU). Sin embargo, también puede ordenar la lista de tareas a su gusto iniciandotop
con la opción-o
(para obtener más información, consulte la páginaman
de top). Ahora, realice las siguientes tareas:-
Inicie
top
para que las tareas se ordenen por uso de memoria:$ top -o %MEM
-
Verifique que escribió el comando correcto resaltando la columna de memoria:
Presione
x
.
-
-
ps
también tiene una opcióno
para especificar las columnas que desea que se muestren. Investigue esta opción y realice las siguientes tareas:-
Inicie
ps
para que solo se muestre información sobre usuario, porcentaje de memoria utilizada, porcentaje de tiempo de CPU utilizado y comando completo:$ ps o user,%mem,%cpu,cmd
-
Ahora, ejecute
ps
para que la única información que se muestre sea la del usuario y el nombre de los programas que están utilizando:$ ps o user,comm
-