- Introducción
- Buscar un proceso
- Enviar señales a los procesos
- 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: - 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.
- El comando pidof (Volver al índice General)
- 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.
- Obtener el PID a partir del nombre del proceso (Volver al índice General)
- 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
- Finalizar un proceso SIGTERM (15) (Volver al índice General)
- 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
- Terminar de forma inmediata todos los PIDs asociados a un nombre de proceso (Volver al índice General)
- 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
- El comando kill (Volver al índice General)
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.
Deja una respuesta