Fundamentos de la gestión de procesos en Linux

Fundamentos de la gestión de procesos en Linux

Objetivo

Aprenda los fundamentos de la gestión de procesos en Linux

Sistema operativo y versiones de software

  • Sistema operativo: - Todas las distribuciones de Linux

Requisitos

  • Algunos programas mencionados en este tutorial requieren acceso a la raíz

Dificultad

FÁCIL

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Introducción

Una de las actividades centrales de un administrador del sistema es el de monitorear e interactuar con los procesos que se ejecutan en una máquina. En este tutorial se le presentará el uso de algunas herramientas fundamentales que lo ayudarán a lograr esa tarea vital.

El comando PS

PS es uno de los programas fundamentales utilizados en el monitoreo de procesos: básicamente le brinda un instantánea de los procesos que se ejecutan en una máquina en el momento en que invoca el comando. Veamos en acción: primero intentaremos ejecutarlo sin ninguna opción:

$ ps pid tty tiempo cmd 24424 pts/0 00:00:00 bash 24468 pts/0 00:00:00 ps 

Como puede ver en la salida anterior, solo se muestran dos procesos: intento con un Pid (identificacion de proceso) 24424 y PD sí mismo con el pid 24468. Esto se debe a que cuando se invoca sin ninguna opción, el PD El comando muestra procesos asociados con el Uid del usuario que lanzó el comando y el terminal desde el que se invoca.

Cómo superar esta limitación? Utilizando el -a Opción que podemos hacer PD para mostrarnos todos los procesos, con la excepción del líderes de sesión y los procesos no asociados con un terminal.

Un líder de la sesión es un proceso que tiene un PID que es el mismo de la Sid (ID de sesión) de la sesión de la que es (el primero) miembro. Cuando se crea un proceso, se realiza parte de la misma sesión de su proceso principal: ya que por convención la identificación de la sesión es la misma de la Pid de su primer miembro, llamamos a este proceso un líder de la sesión. Intentemos correr PD con el -a opción y verificar su salida:

$ ps -a pid tty tiempo cmd 12466 tty1 00:00:00 gnome-session-b 12480 tty1 00:00:17 gnome-shell 12879 tty1 00:00:00 xwayland 12954 tty1 00:00:00 gsd-sund 12955 tty1 00:00:00 GSD-WACOM 12957 TTY1 00:00:00 GSD-XSETTINGS 12961 TTY1 00:00:00 GSD-A11Y-KEYBOA 12962 TTY1 00:00:00 GSD-A11Y-SETTIN 12965 TTY1 00:00:00 GSD -Clipboard 12966 TTY1 00:00:03 GSD-Color 12967 TTY1 00:00:00 GSD-DATETime 12970 TTY1 00:00:00 GSD-Housekeepin 12971 TTY1 00:00:00 GSD-Kekerboard 12972 TTY1 00:00:00 GSD -Media-Keys 12973 TTY1 00:00:00 GSD-MOUSE 12976 TTY1 00:00:00 GSD-ORIENTACIÓN […] 

La salida del programa se ha truncado, pero puede ver fácilmente que ahora incluye procesos que pertenecen a diferentes terminales y usuarios. La salida nos muestra información sobre Pid en la primera columna, Tty en el segundo, TIEMPO cuál es el tiempo acumulativo que pasó la CPU en el proceso, y CMD cuál es el comando que inició el proceso.

Para tener una salida aún más rica, podemos agregar el -u y -X Opciones: el primero dice PD hacer una selección de ID de usuario, Mientras que este último instruye al programa que incluya también procesos no asociados con un terminal, como los demonios:

$ PS -aux User PID %CPU %MEM VSZ RSS TTY STAT TIME COMANDO ROOT 1 0.0 0.2 223932 8708 ? SS Jul20 0:04/usr/lib/systemd/systemd--switched-root --system --serialize 25 root 2 0.0 0.0 0 0 ? S jul20 0:00 [kthreadd] raíz 4 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Jul20 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Jul20 0:07 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul20 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul20 0:04 [rcuos/0] root 11 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/0] root 12 0.0 0.0 0 0 ? S Jul20 0:00 [migration/0] root 13 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/0] root 14 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/1] root 17 0.0 0.0 0 0 ? S Jul20 0:00 [migration/1] root 18 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/1] root 20 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/1:0H] root 21 0.0 0.0 0 0 ? S Jul20 0:02 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/2] root 24 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/2] root 25 0.0 0.0 0 0 ? S Jul20 0:00 [migration/2] root 26 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/2] root 28 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/2:0H] [… ] egdoc 13128 0.0 0.1 74736 5388 ? Ss Jul20 0:00 /usr/lib/systemd/systemd --user egdoc 13133 0.0 0.0 106184 420 ? S Jul20 0:00 (sd-pam) egdoc 13143 0.0 0.1 218328 3612 ? Sl Jul20 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login [… ] 

Puede ver que se ha agregado bastante información nueva. La primera columna nueva de la salida es %UPC: Esto muestra la utilización de la CPU del proceso, expresada como un porcentaje. También se usa un porcentaje para la siguiente columna, %Mem, que muestra la memoria física en la máquina utilizada por el proceso. Vsz es el tamaño de memoria virtual del proceso expresado en kib.

El Estadística La columna utiliza un código para expresar el estado del proceso. No vamos a describir todos los estados posibles aquí, pero solo explicaremos los que aparecen en la salida anterior (puede tener una visión general completa consultando la mano de mano de PS).

Examinemos el primer proceso en la salida: es Pid 1, Por lo tanto, es el primer proceso lanzado por el kernel. Esto tiene sentido, podemos ver que es system, El sistema de inicio de Linux relativamente nuevo, ahora adoptado por casi todas las distribuciones. En primer lugar, tenemos un S lo que indica que el proceso está en el estado de sueño interrumpible lo que significa que está inactivo y se despertará tan pronto como reciba una entrada. El s, en su lugar, nos dice que el proceso es un líder de la sesión.

Otro símbolo, que no aparece en el primer RAW, pero en algunos de los otros procesos, las descripciones son < lo que indica que el proceso tiene alta prioridad y, por lo tanto, un bajo lindo Valor (veremos qué valor es en la sección relevante de este tutorial). Un l en el Estadística columna, indica que el proceso es multiproceso y un + firmar que está en el grupo de proceso en primer plano.

Finalmente, en la última columna, tenemos el COMENZAR columna, mostrando la hora en que se inició el comando.

Otra buena opción que podemos pasar al PD comando, es -O, ¿Cuál es la versión corta de --formato. Esta opción le permite modificar la salida mediante el uso de marcadores de posición, especificando qué columnas mostrar. Por ejemplo, en ejecución:

$ PS -Ax -O%U%P%N%C

Nos dará el USUARIO columna primero (%u), seguido de la Pid del proceso (%p), por el NI columna (%n), que indica el lindo nivel, y finalmente por el DOMINIO columna (%c):

Usuario PID PID Ni Comando Root 1 0 Systemd Root 2 0 Kthreadd Root 4 -20 KWorker/0: 0h Root 6 -20 mm_Percpu_wq Root 7 0 KSofTirqd/0 Root 8 0 RCU_SCHED /0 Root 12 - Migración/0 Root 13 - Watchdog/0 Root 14 0 CPUHP/0 Root 15 0 CPUHP/1 Root 16 - Watchdog/1 Root 17 - Migración/1 Root 18 0 KSofTirqd/1 Root 20 -20 KWorker/ 1: 0h raíz 21 0 rcuos/1 raíz 22 0 rcuob/1 raíz 23 0 cpuhp/2 root 24 - watchdog/2 raíz 25 - migración/2 raíz 26 0 ksoftirqd/2 

Usar 'superior' para interactuar dinámicamente con procesos

Mientras PD nos da una instantánea estática de procesos y su información en el momento en que la ejecuta, arriba nos da una vista dinámica de los procesos, actualizados en un intervalo de tiempo especificado que podemos especificar tanto al lanzar el programa como interactivamente (el valor predeterminado es de 3 segundos).

Top no solo nos muestra una representación dinámica de los procesos de ejecución: podemos interactuar con ellos y con el programa en sí, mediante el uso de algunas claves. Por ejemplo, presionando B nos permite alternar el uso de caracteres en negrita, d nos permite ingresar un valor para cambiar el tiempo de retraso, k nos permite enviar una señal a un proceso solicitando su Pid y para el señal código, con Siglo siendo el valor predeterminado.

Cambiar la prioridad de los procesos con Niza y Renice

Como hemos visto antes, cada proceso tiene un prioridad asignado a él, lo que indica cuánto debe esperar el proceso a que otros procesos liberen recursos antes de que pueda acceder a ellos. Esta prioridad se puede especificar con un valor que está en un rango que va desde -20 a 19. Cuanto menor sea el valor, mayor será la prioridad del proceso. Esto puede parecer contradictorio al principio, pero véalo de esta manera: cuanto más agradable sea el proceso para otros procesos, más lo superarán para acceder a los recursos.

Pero, ¿cómo podemos establecer la prioridad de un proceso?? Podemos usar el lindo programa para realizar la tarea. Digamos que desea ejecutar un script con el valor de prioridad más bajo posible: lo presentaría de esta manera:

$ NICE -N 19 ./guion.mierda

También puede cambiar la prioridad de un programa que ya se ejecuta mediante el uso de re bueno sabiendo que es Pid:

# Renice -N 15 PID

Donde PID es la identificación del proceso del programa. Solo recuerda que el re bueno El comando debe ejecutarse con permisos raíz.

Enviar señales a los procesos con los comandos Kill y Killall

Podemos usar el comando matar para enviar un señal a un proceso que nos pertenece, o a cada proceso si tenemos permisos raíz. Las diversas señales que podemos enviar son identificadas por un número: podemos ver fácilmente estas correspondencias ejecutando el comando Kill con el -l opción:

$ 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 21) Sigttin 22) Sigttou 23) Sigurg 24) Sigxcpu 25) Sigxfsz 26) Sigvtalrm 27) Sigprof 28) Sigwinch 29) Sigio 30) Sigpwr 31) 35) Sigrtmin+1 36) Sigrtmin+2 37) Sigrtmin+3 38) Sigrtmin+4 39) Sigrtmin+5 40) Sigrtmin+6 41) Sigrtmin+7 42) Sigrtmin+8 43) Sigrtmin+9 44) Sigrtmin+10 45) Sigrtmin+11 46) Sigrtmin+12 47) Sigrtmin+13 48) Sigrtmin+14 49) Sigrtmin+15 50) Sigrtmax-14 51) Sigrtmax-13 52) Sigrtmax-12 53) Sigrtmax -1 54) Sigrtmax-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX 

Si no se pasa ninguna opción al matar comando, por defecto, enviará un Siglo Señal al proceso especificado, al que este último podría reaccionar de varias maneras: puede detenerse de inmediato, tratar de hacer un poco de limpieza antes de detenerse, o simplemente ignorar la señal.

Para especificar la señal que se enviará usando Kill, ejecutamos el comando seguido de un tablero y el número de la señal que se enviará. Por ejemplo para ejecutar un Sigkill Señal que debemos ejecutar:

matar -9 pid

El Sigkill señal, a diferencia de Siglo no puede ser atrapado por el proceso, que no puede reaccionar: simplemente se terminará inmediatamente.

Otra señal que verá a menudo es Firme cuál es la señal que se envía en la interrupción del teclado (CTRL-C). También trata de terminar el proceso de una manera elegante, y puede ser ignorado por el proceso. Signo y Sigcont suspenderá y reanudará respectivamente la ejecución de un proceso: el primero, como Sigkill no se puede atrapar ni ignorar. Para una lista completa y una descripción de las señales, puede consultar el manual para señal (7) correr:

señal del hombre 7

El Mátalos a todos El programa tiene el mismo propósito de matar, y como matar, envía un Siglo señal cuando no se especifica ningún otro (esta vez con el --señal opción), pero en lugar de hacer referencia a un proceso por su Pid, Lo hará por nombre de comando, matando efectivamente todos los procesos que se ejecutan bajo el mismo.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • La mejor herramienta de monitoreo de sistemas para Linux
  • Ubuntu 20.04 Monitoreo del sistema con widgets de Conky
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Optimización de rendimiento de Linux: herramientas y técnicas
  • Ubuntu 22.04 Monitoreo del sistema con widgets de Conky
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Descarga de Linux