Logo de TuX - Linux Kernel

Matar y reiniciar procesos con los comandos kill, killall y pkill en Linux

 
 

Índice General

  1. Introducción
  2. Buscar un proceso
  3. Enviar señales a los procesos

 

  1. Introducción (Volver al índice General)
    En este artículo, veremos la forma de enviar señales a los procesos en sistemas UNIX/Linux, para matarlos, reiniciarlos, detenerlos, etc. Los comandos que utilizaremos serán kill, killall y pkill. Veremos las órdenes más utilizadas, pero si te interesa conocer más sobre cada uno de los comandos puedes visitar sus páginas man:

  2.  

  3. Buscar un proceso (Volver al índice General)
    Para enviar señales a los procesos, antes deberemos conocer el nombre del proceso o su PID (Process ID). A continuación veremos las formas más utilizadas para obtener esta información.

       

    • Obtener el PID a partir del nombre del proceso (Volver al índice General)
      En aquellas situaciones en las que conozcamos el nombre del proceso, podremos obtener su PID con alguno de los siguientes comandos:

         

      • El comando pidof (Volver al índice General)
        Este programa se encarga de buscar el PID de un programa en ejecución. Si lo ejecutamos sin opciones pasándole como parámetro el nombre de un proceso obtendremos uno o varios PIDs vinculados a dicho nombre. Veamos un ejemplo:

        $ pidof apache2
        11839 11838 2053 2052 2049 1960 1957 1899 899 897 895 822

        En este ejemplo vemos que los PIDs vinculados al nombre apache2 son 11839 11838 2053 2052 2049 1960 1957 1899 899 897 895 822.

      •  

      • El comando ps (Volver al índice General)
        Otra forma de localizar los PIDs asociados a un nombre de proceso es utilizando el comando ps junto con el comando grep. Veamos un ejemplo:

        $ ps -ef | grep apache2
        root       822     1  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data   897   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data   899   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  1899   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  1957   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  1960   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  2049   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  2052   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data  2053   822  0 08:20 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data 11838   822  0 10:36 ?        00:00:00 /usr/sbin/apache2 -k start
        www-data 11839   822  0 10:36 ?        00:00:00 /usr/sbin/apache2 -k start
        karfer   12130 11710  0 10:40 pts/1    00:00:00 grep apache2
        • -e: Muestra todos los procesos.
        • -f: Hace una lista de formato completo. Visualiza los parámetros con los que se levantó el proceso.
    •  

    • Obtener el nombre del proceso a partir de su PID (Volver al índice General)
      Ya que nos hemos puesto a buscar PIDs a partir del nombre del proceso, también os puede resultar interesante cómo conocer el nombre del proceso a partir de su PID. En ZeppelinuX hemos publicado el artículo Cómo conocer el nombre de un proceso a partir de su PID en Linux en el que se explica el proceso.

  4.  
     
     

  5. Enviar señales a los procesos (Volver al índice General)
    En este apartado veremos como enviar señales a uno o varios procesos mediante los comandos kill, killall y pkill.

       

    • El comando kill (Volver al índice General)
      En primer lugar, veremos como listar todas las señales disponibles que podemos enviar a un proceso con el comando kill. Para listarlas, ejecutaremos la siguiente orden:

      $ 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) SIGSYS      34) SIGRTMIN    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-11 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

      En este artículo, solamente veremos las más utilizadas.

         

      • Finalizar un proceso SIGTERM (15) (Volver al índice General)
        La señal utilizada para finalizar un proceso es SIGTERM. Es la señal por defecto si no se especifica otra, es decir, que si queremos finalizar la ejecución de uno o varios procesos, solo tendremos que ejecutar el comando kill seguido de los PIDs del proceso a finalizar. Veamos un ejemplo de como finalizar un proceso de tres formas distintas:

        $ sudo kill 510
        $ sudo kill -TERM 510
        $ sudo kill -15 510

        Veamos un ejemplo de como finalizar varios procesos a la vez:

        $ sudo kill 617 626 627
      •  

      • Terminar un proceso de forma inmediata SIGKILL (9) (Volver al índice General)
        La señal SIGKILL fuerza a que uno o varios procesos terminen de forma inmediata (no pregunta). Al utilizar esta señal, los procesos no terminan de forma limpia. Suele utilizarse para matar procesos zombis, procesos bloqueados, el proceso init o procesos dormidos. Veamos un ejemplo de como terminar un proceso de dos formas distintas:

        $ sudo kill -KILL 510
        $ sudo kill -9 510
      •  

      • Suspender un proceso SIGSTOP (19) (Volver al índice General)
        Cuando suspendemos un proceso, este se muestra en la lista de procesos y se podría reanudar posteriormente. Veamos un ejemplo de como suspender un proceso de dos formas:

        $ sudo kill -STOP 510
        $ sudo kill -19 510
      •  

      • Reactivar un proceso SIGCONT (18) (Volver al índice General)
        Para reactivar un proceso suspendido usaremos la señal SIGCONT. Veamos un ejemplo de como reactivar un proceso suspendido de dos formas:

        $ sudo kill -CONT 510
        $ sudo kill -18 510
      •  

      • Reiniciar un proceso SIGHUP (1) (Volver al índice General)
        Esta señal para y reinicia el proceso indicado. Si no conocemos el PID del proceso, también podemos utilizar su nombre para reiniciarlo. Veamos un ejemplo de como reiniciar un proceso de tres formas:

        $ sudo kill -HUP 510
        $ sudo kill -1 510
        $ sudo kill -HUP cupsd
    •  

    • El comando killall (Volver al índice General)
      Si queremos enviar señales que afectan a todos los procesos que abre un mismo programa, utilizaremos killall.
      killall también tiene una forma de listar las señales que maneja. Para conocer esta lista, ejecutaremos la siguiente orden:

      $ killall -l
      HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
      CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
         

      • Terminar de forma inmediata todos los PIDs asociados a un nombre de proceso (Volver al índice General)
        La orden a utilizar sería como sigue:

        $ sudo killall -9 nfsd
      •  

      • Reiniciar todos los PIDs asociados a un nombre de proceso (Volver al índice General)
        La orden a utilizar sería como sigue:

        $ sudo killall -HUP nfsd
    •  

    • El comando pkill (Volver al índice General)
      Finalmente, veremos el comando pkill. Este comando nos permite matar un proceso del que conocemos su nombre completo o parte de él. Veamos un ejemplo:

      $ sudo pkill cupsd

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.