Las órdenes kill y killall se utilizan para enviar señales a un proceso. Las señales más habituales son:
Colgar. Ciertos procesos utilizan la señal SIGHUP para indicar al proceso que relea su fichero de configuración. Este es el caso, por ejemplo, de los procesos init y inetd.
Continuar. Cuando un proceso detenido recibe esta señal continúa su ejecución.
Cuando un proceso en estado preparado recibe esta señal se detiene.
Termina un proceso y desaparece.
Mata un proceso de forma controlada.
Esta señal mata un proceso incondicionalmente. Para enviar una señal a un proceso disponemos de dos órdenes que realizan esa labor:
Esta orden la podemos usar de la siguiente forma:
$ kill -señal lista_pid_proceso
donde el valor de lista_pid_proceso tendremos que averiguarlos utilizando la orden ps. En cuanto a señal puede ser bien su valor numérico o bien su valor simbólico, omitiendo el SIG inicial. Por ejemplo:
$ kill -9 337
o lo que sería lo mismo
$ kill -KILL 337
Esta orden es ligeramente diferente a la orden kill por dos motivos; en primer lugar utiliza el nombre de proceso en lugar del pid, y además le envía la señal a todos los procesos que tengan el mismo nombre. Es decir:
$ killall -señal nombre_proceso
Por lo demás, su comportamiento es idéntico, por lo que serían equivalentes
$ kill -HUP 1
$ killall -HUP init
al haber un único proceso init, con pid igual a 1.
También hay que tener en cuenta que todos los procesos no están preparados para recibir todas las señales. Algunas señales siguen un tratamiento estándar, otras las gestiona el propio proceso y otras son simplemente ignoradas.
Ejemplos:
$ ps
$ sleep 100 (pulsar C-z)
$ ps
$ kill -CONT pid # pid se sustituye por el valor obtenido
en ps (pulsar C-z)
$ kill -9 pid
$ ps $ killall -HUP init
y ahora se puede repetir lo mismo con killall. Por ejemplo:
$ ps
$ sleep 100
$ C-z
$ ps
$ killall -CONT pid
$ C-z
$ killall -9 pid
$ ps