Esta es la respuesta más correcta que encomtrarás aportar, pero obsérvala pausadamente y valora si se adapta a tu proyecto.
Solución:
los 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. Tiempo 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
resulta útil cuando desea tener cuidado y revisar primero los procesos de comparación de listas con pgrep
luego proceda 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.
los 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. los -e
, --exact
La opción se puede especificar para requerir también coincidencias exactas para nombres de más de 15 caracteres. Esto hace 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 la -r
, --regexp
opción.
Hay otras diferencias también. los killall
El comando, por ejemplo, tiene opciones para hacer coincidir los procesos por edad (-o
, --older-than
y -y
, --younger-than
), tiempo pkill
se le puede decir que solo elimine procesos en una terminal específica (a través del -t
opción). Claramente, entonces, los dos comandos tienen nichos específicos.
Tenga en cuenta que el killall
el comando en sistemas descendientes de Unix System V (en particular, Solaris de Sun, AIX de IBM y HP-UX de HP) mata 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 a 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 se combina con el altamente reutilizable pgrep
. Matan los procesos de la misma manera y ninguno mata recursivamente, aunque con pgrep
puede seleccionar por sesión (por tty, piense en setsid) o grupo de procesos (piense en control de trabajo).
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
Calificaciones y reseñas
Si te gusta el asunto, puedes dejar una noticia acerca de qué te ha impresionado de este ensayo.