Bienvenidos a este capítulo del Curso de Linux para Hackers – Matar Procesos desde la Shell. Comparte este articulo y síguenos para recibir más capítulos y cursos gratis.

Esta guía es parte de un curso mucho más grande en donde te enseñamos a convertirte en hacker de 0 a 100. Desde los conocimientos más básicos hasta conseguir empleo.

En esta guía veremos desde cero un tema tan amplio como es Linux y lo haremos desde el punto de vista del hacking y la ciberseguridad.

Para saber más comente a continuación, respondemos todos y cada uno de los comentarios.

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Conceptos que aprenderás en esta sección:

  1. Eliminar procesos en Linux: cómo y cuándo matar procesos que dejan de responder o consumen demasiados recursos.
  2. Permisos necesarios para eliminar procesos: diferencia entre permisos de usuario y de root.
  3. Señales de terminación de procesos (SIGKILL y SIGTERM): cómo funcionan las señales de finalización y en qué casos usarlas.
  4. Identificación de procesos (PID): cómo localizar el PID de un proceso.
  5. Comando kill y otras herramientas: comandos kill, pkill, killall y sus variantes para cerrar procesos.

Eliminar procesos en Kali Linux

En algunos casos, es posible que haya notado que cuando un proceso de Linux deja de responder o consume muchos recursos, no le queda otra opción que cerrarlo. Sin embargo, este tipo de situaciones no siempre se dan. Por lo tanto, la mayoría de los procesos tienen sus propios métodos de cierre para evitar este tipo de situaciones.

Desafortunadamente, también hay otros tipos de procesos que pueden funcionar mal y no se detienen por sí solos. Por lo tanto, si un proceso en segundo plano en ejecución deja de responder o consume más recursos de los que debería, se hace necesario cerrarlo o cerrarlo mediante un proceso o método conocido como “kill Process” (Matar proceso).

¿Qué procesos puedes eliminar en Linux?

Antes de finalizar o matar un proceso, debe tener en cuenta los permisos necesarios para finalizar un proceso, especialmente cuando no tiene acceso a la cuenta raíz. Sin embargo, si tiene acceso a la cuenta raíz o es el único propietario del sistema, en ese caso, tiene el poder de finalizar cualquier tipo de proceso en cualquier momento. De lo contrario, un usuario normal que no tenga acceso a la cuenta raíz puede usar “sudo” en el prefijo del comando al finalizar un proceso mediante la línea de comandos.

¿Qué pasa cuando matas un proceso?

Cada vez que un usuario finaliza un proceso, en realidad envía una señal al proceso de destino, que se denomina señal de finalización o mensaje de terminación. Sin embargo, existen varios tipos de mensajes de finalización y algunos de ellos son los siguientes:

  • SIGKILL: generalmente se considera la forma definitiva de matar un proceso. Siempre matará un proceso y lo hará de manera abrupta, generando un error fatal. SIGKILL siempre debería funcionar. Sin embargo, si SIGKILL no funciona, significa claramente que el sistema operativo ha fallado.
  • SIGTERM: generalmente se considera un método menos eficaz porque intenta lo mejor que puede para matar un proceso, pero a diferencia de SIGKILL, se puede bloquear o manejar de otra manera. Por lo tanto, se puede considerar una forma más suave de intentar terminar un proceso.

Entonces, podemos decir que para la mayoría de los propósitos, será mejor utilizar los métodos que utilizan la señal “SIGKILL” para matar un proceso de la manera más segura y rápida.

¿Cómo matar un proceso?

Existen múltiples formas de matar un proceso, pero aquí veremos el método más utilizado y universal que puedes utilizar en cualquier sistema operativo basado en Linux. Aunque matar un proceso suele incluir tres pasos principales que veremos uno por uno.

Matar un proceso

Ahora que hemos rastreado los procesos, podemos matar un proceso. Hay varios comandos que se utilizan para matar un proceso, como kill , kill , top y pkill.

Antes de matar un proceso, es necesario saber qué procesos podemos matar. A continuación, se presentan algunos puntos esenciales sobre la eliminación de procesos:

  • Si es un usuario normal, solo puede eliminar los procesos que le pertenecen. No puede eliminar los procesos que ejecutan otros usuarios. Los comandos top y ps aux muestran los usuarios con el proceso relacionado.
  • Un usuario root puede matar todos los procesos, pero también podemos agregar sudo antes de cualquier comando para ejecutarlo como root.
  • En Linux, cuando se termina un proceso, se transmite una señal especial a los procesos. Aunque existen varios tipos de señales en Linux, en este caso, Linux se ocupa de las señales SIGKILLS y SIGTERM . De forma predeterminada, Linux envía la señal SIGTERM, que termina el proceso sin problemas. Si desea terminar un proceso de forma forzada, utilice SIGKILL en su lugar.
  • Linux conserva el estado de los procesos hasta que se eliminan por completo del sistema. Por lo tanto, los procesos secundarios se mostrarán en la lista de procesos hasta que se elimine un proceso principal.
  • No podemos matar un proceso si se encuentra en «suspensión ininterrumpida «. Esta situación se produce cuando un proceso realiza una operación de entrada/salida. Este estado se puede ver en la octava columna del comando top y ps aux.

Cómo saber el PID

Para utilizar comandos de terminación, es necesario conocer diferentes PID. El PID de un proceso se puede averiguar con el siguiente comando:

Sintaxis:

 ps -A  

Matar un proceso con el comando kill

Los procesos en Linux pueden encontrarse en diferentes estados durante su vida útil, por lo cual a veces tenemos que administrar el estado de los mismos.

Una de las situaciones más común en la administración de procesos es que, ya sea porque el proceso no está reaccionando, el programa se encuentra colgado, o porque simplemente no queremos que siga en ejecución, necesitemos  matarlo. Para ello utilizaremos el comando ―kill.  Si miramos el flag -l podremos ver las posibles señales que podemos enviar a los procesos.

El comando kill es la utilidad más sencilla para matar un proceso; todo lo que necesitamos es el PID de un proceso. Una vez que obtenemos el PID del proceso, es un proceso sencillo. Para terminar un proceso, ejecute el comando kill seguido del PID. Para localizar el PID de un proceso, utilice el comando top o ps aux, como se explicó anteriormente.

Para matar un proceso que tenga PID 5296, ejecute el comando de la siguiente manera:

kill 3421540

Para finalizar un proceso de forma forzada, utilice la opción -SIGKILL o -9:

Kill  -SIGKILL 3423355

El comando anterior finalizará el proceso con PID 3423355

En este ejemplo pueden que le proceso «cacafire» se está ejecutando. Luego de ejecutar el ―kill seguido de los 2 PID que deseo terminar, al ejecutar nuevamente el ―ps Veo que efectivamente el proceso ya no existe.

Otra de las formas de administrar procesos en Linux es mediante el cambio de prioridad de los mismos. Esto quiere decir que podemos darles preferencia a unos u otros para acceder a los recursos del sistema, concretamente al CPU.

Para cambiar la prioridad de un CPU usaremos el comando ―nice o ―renice asignándole un número del -20 a 19 al proceso que queremos modificar. Siendo -20 el valor más elevado, es decir el de mayor prioridad en cuanto a utilización de CPU.  ―nice se utiliza para arrancar un proceso con una determinada prioridad:

En cambio el comando ―renice se utiliza para cambiar la prioridad de un proceso ya existente.

Para ver la prioridad de los procesos utilizaremos el comando ―ps con los flags ―-fl

También  te recomendamos consultar las páginas man para este comando:

 man kill

Resumen de los puntos clave:

  1. Eliminar procesos en Linux y permisos necesarios
    Para cerrar un proceso problemático, es importante tener permisos suficientes. Los usuarios normales pueden matar solo los procesos que iniciaron. En cambio, un usuario root o con permisos sudo puede matar cualquier proceso. Las herramientas top y ps aux muestran los usuarios a cargo de cada proceso.
  2. Señales de terminación de procesos: SIGKILL y SIGTERM
    • SIGKILL (-9): termina forzosamente el proceso, sin permitir que se guarden cambios. Útil para procesos que no responden.
    • SIGTERM: solicita una terminación «suave» del proceso. Si el proceso puede cerrarse normalmente, esta señal le permite hacerlo sin forzar.
  3. Cómo localizar el PID de un proceso
    Para matar un proceso, necesitas conocer su PID, que puedes obtener con ps -A, top, o ps aux. Ejemplo:
    • ps -A | grep <nombre_proceso>
  4. Matar un proceso con el comando kill
    Una vez que se conoce el PID, se puede matar un proceso de forma estándar o forzada:
    • Finalización suave:
      • kill <PID>
    • Finalización forzada (SIGKILL):
      • kill -9 <PID>
  5. kill y otras variantes (pkill, killall)
    • pkill <nombre>: mata todos los procesos que coincidan con el nombre del proceso especificado.
    • killall <nombre>: similar a pkill, pero con soporte de opciones adicionales para filtrar por usuario u otras condiciones.
  6. Cambio de prioridad de procesos con nice y renice
    Para modificar la prioridad de CPU de un proceso:
    • nice -n <valor> <comando>: inicia un proceso con la prioridad especificada, donde -20 es la prioridad máxima.
    • renice <valor> -p <PID>: ajusta la prioridad de un proceso en ejecución.
  7. Ver prioridad de procesos con ps -fl
    Usando ps -fl, puedes ver la prioridad actual de los procesos junto con el estado y otros detalles.

Con estos comandos, puedes identificar y eliminar procesos problemáticos, así como ajustar la prioridad de recursos para optimizar el rendimiento en sistemas Linux.

Pon en práctica lo aprendido

Ahora pon a prueba lo aprendido con estas preguntas y ejercicios.

Preguntas

  1. ¿Qué es un proceso kill y en qué situaciones es necesario utilizarlo en Linux?
  2. ¿Cuál es la diferencia entre las señales SIGKILL y SIGTERM al matar un proceso?
  3. ¿Qué permisos se requieren para eliminar un proceso en Linux y cómo afectan a usuarios normales y al usuario root?
  4. ¿Por qué un proceso en estado de «suspensión ininterrumpida» no puede ser eliminado?
  5. ¿Cómo se identifica el PID de un proceso antes de matarlo?
  6. ¿Qué comando se utiliza para matar un proceso específico usando su PID?
  7. ¿Cómo se usa el comando kill para forzar la finalización de un proceso y cuál es su sintaxis?
  8. ¿Qué utilidad tiene el comando ps -A en la administración de procesos?
  9. ¿Cómo se cambia la prioridad de un proceso en ejecución y cuál es la diferencia entre nice y renice?
  10. ¿Qué comando se utiliza para ver la prioridad de los procesos en ejecución y cómo se interpreta el valor de prioridad?

Ejercicios

  1. Use el comando ps -A para listar todos los procesos y localice el PID de un proceso en ejecución.
  2. Utilice kill para terminar un proceso específico usando su PID, y verifique que ya no esté en la lista de procesos.
  3. Ejecute kill -9 <PID> para forzar la finalización de un proceso y explique la diferencia con el comando kill sin opciones.
  4. Encuentre y termine un proceso que esté ocupando demasiados recursos usando top para localizarlo y kill para finalizarlo.
  5. Ejecute el comando kill -l y liste tres señales que se pueden enviar a los procesos junto a sus descripciones.
  6. Cambie la prioridad de un proceso utilizando nice para iniciarlo con una prioridad específica y verifique su prioridad con top.
  7. Utilice renice para modificar la prioridad de un proceso en ejecución y confirme el cambio en ps -fl.
  8. Ejecute ps aux y describa el estado de un proceso en «suspensión ininterrumpida» usando la octava columna de la salida.
  9. Consulte el manual de kill y explique cómo enviar una señal específica que no sea SIGKILL o SIGTERM a un proceso.
  10. Ejecute ps -fl para ver las prioridades de los procesos en ejecución y compare los valores de prioridad de tres procesos diferentes.

Respuestas a las Preguntas

  1. Proceso kill en Linux: Permite finalizar procesos que no responden o consumen demasiados recursos, enviando una señal de terminación.
  2. Diferencia entre SIGKILL y SIGTERM: SIGKILL fuerza el fin inmediato del proceso, mientras que SIGTERM solicita una terminación limpia y puede ser bloqueado.
  3. Permisos para eliminar procesos: Un usuario normal puede eliminar solo sus procesos; el usuario root o un usuario con permisos sudo puede eliminar cualquier proceso.
  4. Estado de «suspensión ininterrumpida»: Indica que el proceso está esperando una operación de entrada/salida y no responde a señales de terminación.
  5. Identificar PID: Se puede localizar el PID con ps -A o top.
  6. Comando para matar proceso por PID: kill <PID>.
  7. Forzar finalización con kill: Usar kill -9 <PID> o kill -SIGKILL <PID> fuerza el cierre del proceso.
  8. Utilidad de ps -A: Muestra todos los procesos en ejecución y sus PIDs, útil para localizar procesos para finalizarlos o administrarlos.
  9. Cambiar prioridad con nice y renice: nice inicia procesos con prioridad específica; renice ajusta la prioridad de procesos ya en ejecución.
  10. Ver prioridades con ps -fl: Muestra las prioridades (NI), donde valores menores indican mayor prioridad en el uso de CPU.

Respuestas a los Ejercicios

  1. Listar procesos con ps -A: Muestra todos los procesos activos y sus PIDs, como 1234 para nano.
  2. Terminar proceso con kill: kill 1234 elimina el proceso 1234. Verificar en ps o top que ya no aparece.
  3. Forzar fin de proceso con kill -9: kill -9 1234 fuerza el cierre del proceso 1234. A diferencia de kill, kill -9 envía SIGKILL, terminando el proceso de inmediato.
  4. Terminar proceso con alto uso de recursos: Usar top para encontrar el PID y kill <PID> para finalizarlo.
  5. Ejecutar kill -l y tres señales:
    • SIGINT: Interrumpe un proceso.
    • SIGSTOP: Pausa un proceso.
    • SIGCONT: Reanuda un proceso pausado.
  6. Cambiar prioridad con nice: nice -n 10 nano y verificar en top que nano tiene NI=10.
  7. Modificar prioridad con renice: renice 5 -p 1234 cambia la prioridad del proceso 1234 y verificar con ps -fl.
  8. Estado de «suspensión ininterrumpida» en ps aux: En la octava columna, la letra D indica que el proceso está en suspensión ininterrumpida.
  9. Manual de kill y enviar señal específica: kill -SIGUSR1 <PID> envía una señal de usuario personalizada, como SIGUSR1, para que un proceso realice una acción específica.
  10. Ver prioridades en ps -fl: Comparar NI de tres procesos: -10 (alta prioridad), 0 (predeterminada), y 10 (baja prioridad).

No te detengas, sigue avanzando

Aquí tienes un propósito que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera! El mundo necesita más hackers…

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes seguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

Hacker de 0 a 100 desde las bases hasta conseguir empleo

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/hacker-de-0-a-100-desde-las-bases-hasta-conseguir-empleo/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

Hemos creado una ruta de 0 a 100. Un plan de desarrollo que va desde las bases: cómo aprender hacking, qué aprender, en qué orden; pasando por las areas técnicas necesarias como Linux, Redes, Programación y los conocimientos necesarios en ciber seguridad, hacking, pentesting hasta la práctica y el inicio laboral: Crear tu propio laboratorio, certificaciones, adquirir experiencia e iniciarse laboralmente.

Este es un mega post. Una guía con más de 250 artículos que te llevaran por el camino del hacker. Esta guía es gratuita y esta creada gracias al esfuerzo y al trabajo combinado de Alvaro Chirou y mío (Laprovittera Carlos).

Creamos esta guía (futuro curso) para que puedas iniciarte en este mundo. Puedes arrancar ahora, GRATIS, solo necesitas un PC, conexión a internet y paciencia (Ser hacker NO ES un camino de la noche a la mañana).

El Hacking y la ciberseguridad es una carrera divertida, emocionante y gratificante que te recompensará y desafiará por igual. Sin embargo, para quienes buscan adentrarse en este campo en auge y en constante evolución, puede resultar difícil saber por dónde empezar. ¡Ahí es donde entra en juego nuestra guía en ciberseguridad!

Esta es la hoja de ruta hacia el trabajo de ciberseguridad de tus sueños. Te ayudará a entender qué conocimientos, habilidades y certificados son necesarios para alcanzar tus metas profesionales y tener una carrera próspera. Si quieres ser consultor de ciberseguridad, analista de malware, evaluador de penetración, analista de SOC o cualquier otro puesto de ciberseguridad, esta guía es lo que necesitas.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

Compartimos estos recursos para ayudar a la comunidad de hacking y ciberseguridad. COMPARTE y Siéntete libre de agregar más sugerencias en los comentarios a continuación, respondemos todos y cada uno de los comentarios.

Saludos amigos y happy hacking!!!