GNU/Linux >> Tutoriales Linux >  >> Linux

Gestión de procesos en Linux con kill y killall

En Linux, cada programa y demonio es un "proceso". La mayoría de los procesos representan un solo programa en ejecución. Otros programas pueden bifurcarse de otros procesos, como procesos para escuchar ciertas cosas que sucedan y luego responder a ellas. Y cada proceso requiere una cierta cantidad de memoria y potencia de procesamiento. Cuantos más procesos tenga en ejecución, más memoria y ciclos de CPU necesitará. En sistemas más antiguos, como mi computadora portátil de siete años, o computadoras más pequeñas, como Raspberry Pi, puede aprovechar al máximo su sistema si vigila los procesos que se ejecutan en segundo plano.

Puede obtener una lista de procesos en ejecución con ps dominio. Por lo general, querrá dar ps algunas opciones para mostrar más información en su salida. Me gusta usar la -e opción para ver todos los procesos que se ejecutan en mi sistema, y ​​el -f opción para obtener detalles completos sobre cada proceso. Estos son algunos ejemplos:

$ ps
    PID TTY          TIME CMD
  88000 pts/0    00:00:00 bash
  88052 pts/0    00:00:00 ps
  88053 pts/0    00:00:00 head
$ ps -e | head
    PID TTY          TIME CMD
      1 ?        00:00:50 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      6 ?        00:00:02 kworker/0:0H-events_highpri
      9 ?        00:00:00 mm_percpu_wq
     10 ?        00:00:01 ksoftirqd/0
     11 ?        00:00:12 rcu_sched
     12 ?        00:00:00 migration/0
$ ps -ef | head
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 13:51 ?        00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root           2       0  0 13:51 ?        00:00:00 [kthreadd]
root           3       2  0 13:51 ?        00:00:00 [rcu_gp]
root           4       2  0 13:51 ?        00:00:00 [rcu_par_gp]
root           6       2  0 13:51 ?        00:00:02 [kworker/0:0H-kblockd]
root           9       2  0 13:51 ?        00:00:00 [mm_percpu_wq]
root          10       2  0 13:51 ?        00:00:01 [ksoftirqd/0]
root          11       2  0 13:51 ?        00:00:12 [rcu_sched]
root          12       2  0 13:51 ?        00:00:00 [migration/0]

El último ejemplo muestra la mayoría de los detalles. En cada línea, el UID (ID de usuario) muestra el usuario propietario del proceso. El PID (ID del proceso) representa el ID numérico de cada proceso, y el PPID (ID del proceso principal) muestra el ID del proceso que generó este. En cualquier sistema Unix, los procesos cuentan desde PID 1, el primer proceso que se ejecuta una vez que se inicia el kernel. Aquí, systemd es el primer proceso, que generó kthreadd . Y kthreadd creó otros procesos, incluido rcu_gp , rcu_par_gp , y un montón de otros.

Gestión de procesos con el comando kill

El sistema se encargará de la mayoría de los procesos en segundo plano por sí solo, por lo que no tendrá que preocuparse por ellos. Solo debe involucrarse en la administración de cualquier proceso que cree, generalmente mediante la ejecución de aplicaciones. Si bien muchas aplicaciones ejecutan un proceso a la vez (piense en su reproductor de música, emulador de terminal o juego), otras aplicaciones pueden crear procesos en segundo plano. Algunos de estos pueden seguir ejecutándose cuando sale de la aplicación para que puedan volver a funcionar rápidamente la próxima vez que inicie la aplicación.

La gestión de procesos es un problema cuando ejecuto Chromium, la base de código abierto para el navegador Chrome de Google. Chromium hace que mi computadora portátil trabaje bastante y activa muchos procesos adicionales. En este momento, puedo ver estos procesos de Chromium ejecutándose con solo cinco pestañas abiertas:

$ ps -ef | fgrep chromium
jhall      66221   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      66230   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall      66861   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      67329   65132  0 15:45 pts/0    00:00:00 grep -F chromium

Omití algunas líneas, pero hay 20 procesos Chromium y un grep proceso que busca la cadena "cromo".

$ ps -ef | fgrep chromium | wc -l
21

Pero después de salir de Chromium, esos procesos permanecen abiertos. ¿Cómo los apaga y recupera la memoria y la CPU que esos procesos están ocupando?

El matar comando le permite terminar un proceso. En el caso más simple, le dices matar el PID de lo que desea detener. Por ejemplo, para finalizar cada uno de estos procesos, necesitaría ejecutar kill comando contra cada uno de los 20 ID de proceso de Chromium. Una forma de hacerlo es con una línea de comando que obtenga los PID de Chromium y otra que ejecute kill. contra esa lista:

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $( cat /tmp/pids)

Esas dos últimas líneas son la clave. La primera línea de comando genera una lista de ID de proceso para el navegador Chromium. La segunda línea de comando ejecuta kill comando contra esa lista de ID de proceso.

Presentación del comando killall

Una forma más sencilla de detener un montón de procesos a la vez es usar el killall dominio. Como puede adivinar por el nombre, killall termina todos los procesos que coinciden con un nombre. Eso significa que podemos usar este comando para detener todos nuestros procesos Chromium no autorizados. Esto es tan simple como:

$ killall /usr/lib64/chromium-browser/chromium-browser

Pero cuidado con killall . Este comando puede terminar cualquier proceso que coincida con lo que le das. Por eso me gusta usar primero ps -ef para verificar mis procesos en ejecución, luego ejecute killall contra la ruta exacta al comando que quiero detener.

También puede usar el -i o --interactivo opción para pedir killall para avisarle antes de que detenga cada proceso.

matar también admite opciones para seleccionar procesos que son más antiguos que un tiempo específico usando -o o --mayor que opción. Esto puede ser útil si descubre un conjunto de procesos no autorizados que se han estado ejecutando sin supervisión durante varios días, por ejemplo. O puede seleccionar procesos que son más recientes que un tiempo específico, como procesos fuera de control que comenzó recientemente. Usa la -y o --más joven que opción para seleccionar estos procesos.

Otras formas de gestionar procesos

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

La gestión de procesos puede ser una parte importante del mantenimiento del sistema. Al principio de mi carrera como administrador de sistemas Unix y Linux, la capacidad de eliminar trabajos escapados era una herramienta útil para mantener los sistemas funcionando correctamente. Es posible que no necesite eliminar procesos no autorizados en un escritorio Linux moderno, pero saber eliminar y matar puede ayudarte cuando las cosas eventualmente salgan mal.

También puede buscar otras formas de administrar los procesos. En mi caso, realmente no necesitaba usar kill o matar para detener los procesos de Chromium en segundo plano después de salir del navegador. Hay una configuración simple en Chromium para controlar eso:

Aún así, siempre es una buena idea estar al tanto de los procesos que se ejecutan en su sistema y saber cómo administrarlos cuando sea necesario.


Linux
  1. Administrar su hardware adjunto en Linux con systemd-udevd

  2. Creación y gestión de particiones en Linux con parted

  3. Linux:Buscar y eliminar procesos zombis

  4. Encuentre (y elimine) procesos antiguos

  5. La mejor manera de matar los procesos de estado Zombie y D en Linux

Fkill:busque y elimine procesos de forma interactiva en Linux

Cómo encontrar y matar procesos en ejecución en Linux

Cómo localizar y matar un proceso con terminal Linux

Master Linux Kill Process usando ps, pgrep, pkill y más

Cómo matar procesos en Linux usando kill, killall y pkill

Comando Linux fuser con ejemplos