Manejando Procesos

Table of contents

Todo tipo de sistema requiere de la existencia de un método para manejarlo. En el caso de Linux, tenemos disponibles varios comandos y utilidades con diferentes características para manejar procesos. Debemos tener en mente que hay diferentes categorías de procesos: usuario, aplicación y sistema.

Manejar Procesos De Usuario Manualmente

Supongamos que hemos empezado un programa en segundo plano que nos muestra el PID correspondiente.

~/linux-devesp/linux-scripts/forever-loop.sh &
[1] 16952

Mas tarde, podemos usar el comando ps en combinación con grep para localizar y ver el estado corriente del proceso.

-> ps -auxw
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
devuser    16952  0.0  0.0   4496  3328 pts/0    S    18:03   0:00 bash ./forever-loop.sh

Podemos terminar ese programa con el comando kill pasando como argumento el PID del proceso.

kill -9 16952

Manejar Procesos De Aplicaciones

Una aplicacion se entiende como un proceso que no pertenece directamente al sistema operativo o a un usuario regular. Por ejemplo NGINX.

Veamos un ejemplo rápido en Ubuntu.

  • instalar nginx (paquete nginx)
  • empezar la aplicación (proceso nginx)
  • terminar la aplicación (proceso nginx)
devuser@ubuntu2204-2-devesp
hist:58 -> sudo apt install nginx

devuser@ubuntu2204-2-devesp
hist:60 -> sudo systemctl start nginx

devuser@ubuntu2204-2-devesp
hist:61 -> sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-08-03 06:08:36 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 1336 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1337 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1338 (nginx)
      Tasks: 7 (limit: 19648)
     Memory: 7.4M
        CPU: 31ms
     CGroup: /system.slice/nginx.service
             ├─1338 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─1339 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ├─1340 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ├─1341 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ├─1342 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ├─1343 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             └─1344 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Aug 03 06:08:36 ubuntu2204-2-devesp systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 03 06:08:36 ubuntu2204-2-devesp systemd[1]: Started A high performance web server and a reverse proxy server.

devuser@ubuntu2204-2-devesp
hist:61 -> sudo systemctl stop nginx

devuser@ubuntu2204-2-devesp
hist:62 -> sudo systemctl status nginx
○ nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2024-08-03 06:08:45 UTC; 1min 58s ago
       Docs: man:nginx(8)
    Process: 1336 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1337 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1361 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
   Main PID: 1338 (code=exited, status=0/SUCCESS)
        CPU: 47ms

Aug 03 06:08:36 ubuntu2204-2-devesp systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 03 06:08:36 ubuntu2204-2-devesp systemd[1]: Started A high performance web server and a reverse proxy server.
Aug 03 06:08:45 ubuntu2204-2-devesp systemd[1]: Stopping A high performance web server and a reverse proxy server...
Aug 03 06:08:45 ubuntu2204-2-devesp systemd[1]: nginx.service: Deactivated successfully.
Aug 03 06:08:45 ubuntu2204-2-devesp systemd[1]: Stopped A high performance web server and a reverse proxy server.

En RedHat instalamos NGINX asi:

-> sudo yum install nginx

Luego usamos los mismos comando como en Ubuntu para empezar y terminar el proceso.

-> sudo systemctl start nginx
-> sudo systemctl stop nginx
-> sudo systemctl status nginx

Manejar Procesos De Sistema

Típicamente los procesos de sistemas son manejados for SYSTEMD con el comando systemctl

Es necesario tener privilegios de super usuario para manejar procesos de sistema.

Los usos mas comúnes son ver el estatus, terminar o empezar el proceso.
Un ejemplo de proceso de sistem es SSHD, que es usado for el comando ssh para entrar remotamente an un sistema.

sudo systemctl status sshd
sudo systemctl stop sshd
sudo systemctl start sshd

Basicamente, cuando decimos stop, el proceso termina. En el ejemplo de SSHD, indica que hemos perdido la abiliad the entrar al sistem usando el comando ssh. Por lo tando debe ternerse sumo cuidado de planear adecuadamete cuado tal tarea tenga lugar.

Monitorear Procesos De Sistema

Ademas de usar comandos tales como ps y otras utilidade, podemos hacer uso de las facilidades que provee SYSTEMD.
En este ejemplo, el comando systemctl muestra que SSHD esta cargado y corriendo (loaded/running).

-> sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-05-11 18:55:36 UTC; 3min 9s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 17935 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 17936 (sshd)
      Tasks: 1 (limit: 19648)
     Memory: 1.7M
        CPU: 22ms
     CGroup: /system.slice/ssh.service
             └─17936 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

May 11 18:55:36 ubuntu2204-1-devesp systemd[1]: Starting OpenBSD Secure Shell server...
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on 0.0.0.0 port 22.
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on :: port 22.
May 11 18:55:36 ubuntu2204-1-devesp systemd[1]: Started OpenBSD Secure Shell server.

Ademos de eso podemos ver los logs del proceso. Usando el ejemplo de SSHD, podemos localizar /var/log/auth.log que muestra la actividad en tiempo real del proceso.

-> sudo tail -f /var/log/auth.log
May 11 18:47:33 ubuntu2204-1-devesp sshd[17833]: Server listening on 0.0.0.0 port 22.
May 11 18:47:33 ubuntu2204-1-devesp sshd[17833]: Server listening on :: port 22.
May 11 18:51:00 ubuntu2204-1-devesp sshd[17833]: Received signal 15; terminating.
May 11 18:51:00 ubuntu2204-1-devesp sshd[17833]: Received signal 15; terminating.
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on 0.0.0.0 port 22.
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on :: port 22.
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on 0.0.0.0 port 22.
May 11 18:55:36 ubuntu2204-1-devesp sshd[17936]: Server listening on :: port 22.

Tambien podemos usar el comando journalctl para ver lo que ha pasado durante un cierto tiempo.

-> journalctl -u sshd --since "30 minutes ago"
-- No entries --

Conclusion

Es importante conocer el estado de diferentes procesos en el sistema. Este conocimiento es crucial para determinar el estado general y salud de los procesos en general. Pasado el tiempo, podemos determinar si el sistema tiene la capacidad de sostener el nivel de presion o si necesitamos actualizar la configuracion para alcanzar funcionalidad optima. Es por esta razón que existen conceptos de computación tales como elasticidad, y optimización de plataformas.

Referencias

Glosario De Comandos

Los comandos siguientes son usados frecuentemente en sesiones de Linux.

systemctl
utilidad de línea de comandos para administrar servicios sin SystemD
journalctl
Consultar el diario systemd

Referencias Utiles

Paginas Manuales

Return to main page.