El pgrep
y pkill
Las utilidades se introdujeron en Solaris 7 de Sun y, como señaló g33klord, toman un patrón como argumento que se compara con los nombres de los procesos en ejecución. Mientras que pgrep
simplemente imprime una lista de procesos coincidentes, pkill
enviará la señal especificada (o SIGTERM
por defecto) a los procesos. Las opciones comunes y la semántica entre pgrep
y pkill
es útil cuando desea tener cuidado y primero revisar la lista de procesos coincidentes con pgrep
, luego procede a matarlos con pkill
. pgrep
y pkill
son proporcionados por el paquete procps, que también proporciona otros /proc
utilidades del sistema de archivos, como ps
, top
, free
, uptime
entre otros.
El killall
El comando lo proporciona el paquete pmisc y difiere de pkill
en que, de forma predeterminada, coincide exactamente con el nombre del argumento (hasta los primeros 15 caracteres) al determinar los procesos a los que se enviarán las señales. El -e
, --exact
La opción se puede especificar para requerir también coincidencias exactas para nombres de más de 15 caracteres. Esto hace que killall
algo más seguro de usar en comparación con pkill
. Si el argumento especificado contiene una barra inclinada (/
), el argumento se interpreta como un nombre de archivo y los procesos que ejecutan ese archivo en particular se seleccionarán como destinatarios de la señal. killall
también admite la coincidencia de expresiones regulares de nombres de procesos, a través de -r
, --regexp
opción.
Hay otras diferencias también. El killall
El comando, por ejemplo, tiene opciones para hacer coincidir los procesos por antigüedad (-o
, --older-than
y -y
, --younger-than
), mientras que pkill
se le puede indicar que solo elimine procesos en un terminal específico (a través del -t
opción). Claramente entonces, los dos comandos tienen nichos específicos.
Tenga en cuenta que el killall
comando en sistemas descendientes de Unix System V (en particular, Solaris de Sun, AIX de IBM y HP-UX de HP) mata a todos procesos eliminables por un usuario en particular, cerrando efectivamente el sistema si se ejecuta por root.
Las utilidades pmisc de Linux han sido portadas a BSD (y en extensión Mac OS X), por lo tanto killall
sigue la semántica de "matar procesos por nombre".
pkill
es el que vale la pena enseñar a las generaciones futuras, tanto por los filtros que mencionas como por el hecho de que está emparejado con el altamente reutilizable pgrep
. Eliminan los procesos de la misma manera y ninguno de ellos recursivamente, aunque con pgrep
, puede seleccionar por sesión (per-tty, think setsid) o grupo de procesos (think job control).
una diferencia es que killall
tomar el nombre exacto del proceso como argumento mientras que pkill
puede tomar nombre parcial o completo.
Puede consultar esta pregunta para conocer en profundidad sobre pkill