Las utilidades pgrep
y pkill
se introdujeron en Sun's Solaris 7 y, como señaló g33klord , toman un patrón como argumento que coincide con los nombres de los procesos en ejecución. Si bien 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
son útiles cuando desea tener cuidado y primero revise los procesos de comparación de listas con pgrep
, luego proceda a eliminarlos con pkill
. pgrep
y pkill
se proporcionan por el los procps paquete, que también proporciona otras /proc
utilidades del sistema de archivos, tales como ps
, top
, free
, uptime
entre otros.
El killall
comando es proporcionado por el paquete psmisc , y difiere de pkill
eso, de manera predeterminada, coincide exactamente con el nombre del argumento (hasta los primeros 15 caracteres) al determinar las señales de proceso a las que se enviarán. La opción -e
, --exact
se puede especificar para que también requiera coincidencias exactas para nombres de más de 15 caracteres. Esto hace que sea killall
algo más seguro de usar en comparación con pkill
. Si el argumento especificado contiene caracteres de barra diagonal ( /
), 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 soporta expresiones regulares de nombres de proceso, a través de la -r
, --regexp
opción.
Hay otras diferencias también. El killall
comando, por ejemplo, tiene opciones para unir procesos por edad ( -o
, --older-than
y -y
, --younger-than
), mientras pkill
que se le puede decir que solo mate procesos en un terminal específico (a través de la -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 (especialmente Sun's Solaris , IBM's AIX y HP's HP-UX ) mata todos los procesos que un usuario en particular puede matar , cerrando efectivamente el sistema si se ejecuta desde la raíz.
Las utilidades psmisc de Linux se han portado a BSD (y en la extensión Mac OS X ), por lo tanto, killall
sigue la semántica "matar procesos por nombre".