Se utilizan diferentes comandos para enviar señales a los procesos para terminarlos o "matarlos". Esto es necesario cuando un proceso deja de responder (se bloquea), provoca inestabilidad en el sistema o no puede ceder el control sobre un archivo que intenta modificar.
Uso del número pid para finalizar procesos
Puede usar el comando matar con la tabla de procesos para finalizar procesos. Al ingresar kill seguido del PID, puede finalizar procesos específicos. Sin embargo, la tabla de procesos puede mostrar procesos que no le pertenecen. Como usuario, puede usar el comando kill solo con procesos de su propiedad. Como root, puede eliminar cualquier proceso.
Señales de matar
Hay muchas formas de matar un proceso, cada una asignada a una señal. Esta señal determina cómo matar el proceso. Algunas señales son más apropiadas que otras en ciertas situaciones. Por ejemplo, es posible que desee finalizar un proceso correctamente, dándole tiempo para limpiar las últimas actividades. Sin embargo, algunos procesos ignorarán esta señal o simplemente no terminarán en un período de tiempo razonable. Para eso, es posible que deba emitir una señal más agresiva.
Hay muchas señales de muerte diferentes. Cada señal tiene un nombre y uno o más valores numéricos correspondientes; puedes usar cualquiera con el comando matar. Algunas de las señales más comunes se describen a continuación:
1. SIGINT (2)
– Interrumpe el proceso desde la terminal.
– Se puede capturar o ignorar.
– Igual que presionar Ctrl+C
2. SIGKILL (9)
– Elimina el proceso inmediatamente.
– No se puede detectar ni ignorar.
– Último recurso.
3. SIGTERM (15)
– Finaliza el proceso.
– Puede detectarse o ignorarse.
– Enviado desde el programa y no desde la terminal.
4. SIGSTOP (17, 19, 23)
– Pausa el proceso.
– No se puede detectar ni ignorar.
– Enviado desde el programa y no desde el terminal.
5. SIGSTP (18, 20, 24)
– Pausa el proceso desde la terminal.
– Se puede capturar o ignorar.
– Igual que presionar Ctrl+Z.
Demostración de señales de muerte
Los siguientes son algunos ejemplos de implementación de señales de eliminación. Para finalizar correctamente un proceso con ID 921:
$ kill 15 921
En su defecto, para eliminar el proceso de inmediato:
$ kill 9 921
Alternativamente, para pausar en lugar de eliminar el proceso por completo:
$ kill 17 921
Ejemplos de comandos de matar
1. Para obtener la lista de señales:
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31) SIGUSR2
2. Para enviar una señal particular:
# kill -s 9
3. Para especificar la lista de procesos para eliminar:
# kill 1234 2345 3456
4. Termine un programa utilizando la señal SIGTERM (terminar) predeterminada:
# kill process_id
5. Terminar un trabajo en segundo plano:
# kill %job_id
6. Termine un programa utilizando la señal SIGHUP (colgar). Muchos demonios se recargarán en lugar de terminar:
# kill -1|HUP process_id
7. Termine un programa utilizando la señal SIGINT (interrupción). Esto normalmente lo inicia el usuario presionando `Ctrl + C`:
# kill -2|INT process_id
8. Señale al sistema operativo que finalice inmediatamente un programa (que no tiene posibilidad de capturar la señal):
# kill -9|KILL process_id
9. Señale al sistema operativo que pause un programa hasta que se reciba una señal SIGCONT ("continuar"):
# kill -17|STOP process_id
10. Envíe una señal `SIGUSR1` a todos los procesos con el GID dado (ID de grupo):
# kill -SIGUSR1 -group_id