Cómo utilizar ps, kill y nice para gestionar procesos en Linux

Introducción

Índice
  1. Introducción
  • Paso 1: Cómo ver los procesos en ejecución en Linux
  • Paso 2: Cómo usar ps para enumerar procesos
  • Paso 3 – Cómo enviar señales a procesos en Linux
  • Paso 4 – Cómo ajustar las prioridades del proceso
  • Conclusión
  • Un servidor Linux, como cualquier computadora moderna, ejecuta múltiples aplicaciones, las cuales se denominan y se administran como procesos individuales .

    Si bien Linux se encargará de la gestión de bajo nivel, detrás de escena, en el ciclo de vida de un proceso (es decir, inicio, apagado, asignación de memoria, etc.), necesitará una forma de interactuar con el sistema operativo para administrarlos desde un nivel superior.

    En esta guía, aprenderá algunos aspectos fundamentales de la gestión de procesos. Linux ofrece una serie de herramientas estándar integradas para este propósito.

    Explorarás estas ideas en un entorno Ubuntu 20.04, pero cualquier distribución moderna de Linux funcionará de manera similar.

    Paso 1: Cómo ver los procesos en ejecución en Linux

    Puede ver todos los procesos que se ejecutan en su servidor usando el topcomando:

    1. top
    Outputtop - 15:14:40 up 46 min,  1 user,  load average: 0.00, 0.01, 0.05Tasks:  56 total,   1 running,  55 sleeping,   0 stopped,   0 zombieCpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stMem:   1019600k total,   316576k used,   703024k free,     7652k buffersSwap:        0k total,        0k used,        0k free,   258976k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND               1 root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init                   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.07 ksoftirqd/0            6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0            7 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 watchdog/0             8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset                 9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper               10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs          

    Las primeras líneas de salida proporcionan estadísticas del sistema, como la carga de CPU/memoria y el número total de tareas en ejecución.

    Puedes ver que hay 1 proceso en ejecución y 55 procesos que se consideran inactivos porque no están utilizando activamente ciclos de CPU.

    El resto de la salida mostrada muestra los procesos en ejecución y sus estadísticas de uso. De manera predeterminada, toplos ordena automáticamente por uso de CPU, de modo que pueda ver primero los procesos más activos. topcontinuará ejecutándose en su shell hasta que lo detenga utilizando la combinación de teclas estándar Ctrl+Cpara salir de un proceso en ejecución. Esto envía una killseñal que le indica al proceso que se detenga correctamente si puede hacerlo.

    En la mayoría de los repositorios de paquetes se encuentra disponible una versión mejorada de top, denominada htop. En Ubuntu 20.04, puedes instalarla con apt:

    1. sudo apt install htop

    Después de esto, el htopcomando estará disponible:

    1. htop
    Output  Mem[|||||||||||           49/995MB]     Load average: 0.00 0.03 0.05   CPU[                          0.0%]     Tasks: 21, 3 thr; 1 running  Swp[                         0/0MB]     Uptime: 00:58:11  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command 1259 root       20   0 25660  1880  1368 R  0.0  0.2  0:00.06 htop    1 root       20   0 24188  2120  1300 S  0.0  0.2  0:00.56 /sbin/init  311 root       20   0 17224   636   440 S  0.0  0.1  0:00.07 upstart-udev-brid  314 root       20   0 21592  1280   760 S  0.0  0.1  0:00.06 /sbin/udevd --dae  389 messagebu  20   0 23808   688   444 S  0.0  0.1  0:00.01 dbus-daemon --sys  407 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.02 rsyslogd -c5  408 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5  409 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5  406 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.04 rsyslogd -c5  553 root       20   0 15180   400   204 S  0.0  0.0  0:00.01 upstart-socket-br

    htopProporciona una mejor visualización de múltiples subprocesos de CPU, un mejor conocimiento de la compatibilidad de colores en terminales modernas y más opciones de ordenamiento, entre otras características. A diferencia de top, no siempre se instala de forma predeterminada, pero se puede considerar un reemplazo directo. Puede salir htoppresionando Ctrl+Ccomo con top. También puede obtener más información sobre cómo usar top y htop .

    En la siguiente sección, aprenderá cómo utilizar herramientas para consultar procesos específicos.

    Paso 2: Cómo usar ps para enumerar procesos

    topy htopproporcionar una interfaz de panel para ver los procesos en ejecución similar a un administrador de tareas gráfico. Una interfaz de panel puede proporcionar una descripción general, pero por lo general no devuelve una salida directamente procesable. Para esto, Linux proporciona otro comando estándar llamado pspara consultar los procesos en ejecución.

    Ejecutar pssin ningún argumento proporciona muy poca información:

    1. ps
    Output  PID TTY          TIME CMD 1017 pts/0    00:00:00 bash 1262 pts/0    00:00:00 ps

    Esta salida muestra todos los procesos asociados con el usuario actual y la sesión de terminal. Esto tiene sentido si actualmente solo está ejecutando el bashshell y este pscomando dentro de esta terminal.

    Para obtener una imagen más completa de los procesos en este sistema, puede ejecutar ps aux:

    1. ps aux
    OutputUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.2  24188  2120 ?        Ss   14:28   0:00 /sbin/initroot         2  0.0  0.0      0     0 ?        S    14:28   0:00 [kthreadd]root         3  0.0  0.0      0     0 ?        S    14:28   0:00 [ksoftirqd/0]root         6  0.0  0.0      0     0 ?        S    14:28   0:00 [migration/0]root         7  0.0  0.0      0     0 ?        S    14:28   0:00 [watchdog/0]root         8  0.0  0.0      0     0 ?        S   14:28   0:00 [cpuset]root         9  0.0  0.0      0     0 ?        S   14:28   0:00 [khelper]…

    Estas opciones indican pscómo mostrar los procesos que son propiedad de todos los usuarios (independientemente de su asociación de terminal) en un formato más legible para humanos.

    Al utilizar tuberías, puede buscar dentro de la salida de ps auxusing greppara obtener el nombre de un proceso específico. Esto es útil si cree que se ha bloqueado o si necesita detenerlo por algún motivo.

    1. ps aux | grep bash
    Outputsammy         41664   0.7  0.0 34162880   2528 s000  S     1:35pm   0:00.04 -bashsammy         41748   0.0  0.0 34122844    828 s000  S+    1:35pm   0:00.00 grep bash

    Esto devuelve tanto el grepproceso que acaba de ejecutar como el bashshell que se está ejecutando actualmente. También devuelve el uso total de memoria y CPU, el tiempo que han estado ejecutándose y, en la salida resaltada arriba, su ID de proceso . En sistemas Linux y similares a Unix, a cada proceso se le asigna un ID de proceso o PID . Así es como el sistema operativo identifica y realiza un seguimiento de los procesos.

    Una forma rápida de obtener el PID de un proceso es con el pgrepcomando:

    1. pgrep bash
    Output1017

    Al primer proceso que se genera durante el arranque, llamado init , se le asigna el PID “1”.

    1. pgrep init
    Output1

    Este proceso es entonces el responsable de generar todos los demás procesos del sistema. A los procesos posteriores se les asignan números PID más grandes.

    El padre de un proceso es el proceso que fue responsable de generarlo. Los procesos padre tienen un PPID , que puede verse en los encabezados de columna en muchas aplicaciones de administración de procesos, incluidas top, htopy ps.

    Toda comunicación entre el usuario y el sistema operativo acerca de los procesos implica la traducción entre los nombres de los procesos y los PID en algún momento durante la operación. Por este motivo, estas utilidades siempre incluirán el PID en su salida. En la siguiente sección, aprenderá a utilizar los PID para enviar señales de detención, reanudación u otras señales a los procesos en ejecución.

    Paso 3 – Cómo enviar señales a procesos en Linux

    Todos los procesos en Linux responden a señales . Las señales son una forma a nivel del sistema operativo de indicar a los programas que finalicen o modifiquen su comportamiento.

    La forma más común de pasar señales a un programa es mediante el killcomando. Como es de esperar, la función predeterminada de esta utilidad es intentar matar un proceso:

    1. kill PID_of_target_process

    Esto envía la señal TERM al proceso. La señal TERM le indica al proceso que finalice. Esto permite que el programa realice operaciones de limpieza y salga sin problemas.

    Si el programa se comporta mal y no sale cuando se le da la señal TERM, puede escalar la señal pasando la KILLseñal:

    1. kill -KILL PID_of_target_process

    Esta es una señal especial que no se envía al programa.

    En cambio, se le da al núcleo del sistema operativo, que cierra el proceso. Esto se utiliza para eludir a los programas que ignoran las señales que se les envían.

    Cada señal tiene un número asociado que se puede pasar en lugar del nombre. Por ejemplo, se puede pasar “-15” en lugar de “-TERM” y “-9” en lugar de “-KILL”.

    Las señales no sólo se utilizan para cerrar programas, sino que también se pueden utilizar para realizar otras acciones.

    Por ejemplo, muchos procesos que están diseñados para ejecutarse constantemente en segundo plano (a veces llamados “daemons”) se reiniciarán automáticamente cuando se les dé la señal de HUP” colgar” . El servidor web Apache normalmente funciona de esta manera.

    1. sudo kill -HUP pid_of_apache

    El comando anterior hará que Apache vuelva a cargar su archivo de configuración y reanude el servicio de contenido.

    Nota: Muchos procesos en segundo plano como este se gestionan a través de servicios del sistema que proporcionan una superficie adicional para interactuar con ellos, y normalmente es preferible reiniciar el servicio en sí en lugar de enviar una HUPseñal directamente a un proceso en ejecución. Si revisa los archivos de configuración de varios servicios, puede encontrar que los distintos service restartganchos están diseñados para hacer exactamente eso (enviar señales a procesos específicos) y, al mismo tiempo, proporcionar registros y otros informes.

    Puedes enumerar todas las señales que se pueden enviar con killla -lbandera:

    1. kill -l
    Output1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM

    Aunque la forma convencional de enviar señales es mediante el uso de PID, también existen métodos para hacerlo con nombres de procesos regulares.

    El pkillcomando funciona casi exactamente de la misma manera que kill, pero opera sobre un nombre de proceso:

    1. pkill -9 ping

    El comando anterior es equivalente a:

    1. kill -9 `pgrep ping`

    Si desea enviar una señal a cada instancia de un determinado proceso, puede utilizar el killallcomando:

    1. killall firefox

    El comando anterior enviará la señal TERM a cada instancia que firefoxse esté ejecutando en la computadora.

    Paso 4 – Cómo ajustar las prioridades del proceso

    A menudo, querrás ajustar qué procesos tienen prioridad en un entorno de servidor.

    Algunos procesos pueden considerarse críticos para su situación, mientras que otros pueden ejecutarse cuando haya recursos sobrantes.

    Linux controla la prioridad a través de un valor llamado niceness .

    Las tareas de alta prioridad se consideran menos agradables , porque no comparten tantos recursos. Por otro lado, los procesos de baja prioridad son agradables porque insisten en utilizar solo un mínimo de recursos.

    Cuando se ejecutó topal principio del artículo, había una columna marcada como “NI”. Este es el valor agradable del proceso:

    1. top
    [secondary_label Output] Tasks:  56 total,   1 running,  55 sleeping,   0 stopped,   0 zombieCpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stMem:   1019600k total,   324496k used,   695104k free,     8512k buffersSwap:        0k total,        0k used,        0k free,   264812k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            1635 root      20   0 17300 1200  920 R  0.3  0.1   0:00.01 top                    1 root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init                   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.11 ksoftirqd/0

    Los valores agradables pueden oscilar entre -19/-20 (prioridad más alta) y 19/20 (prioridad más baja) dependiendo del sistema.

    Para ejecutar un programa con un determinado valor nice, puedes usar el nicecomando:

    1. nice -n 15 command_to_execute

    Esto sólo funciona cuando se inicia un nuevo programa.

    Para alterar el valor agradable de un programa que ya se está ejecutando, se utiliza una herramienta llamada renice:

    1. renice 0 PID_to_prioritize

    Conclusión

    La gestión de procesos es una parte fundamental de Linux que resulta útil en casi todos los contextos. Incluso si no realiza ninguna administración práctica del sistema, poder localizar procesos bloqueados y gestionarlos con cuidado resulta muy útil.

    A continuación, es posible que desee aprender a utilizar netstaty dusupervisar otros recursos del servidor .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion