Sé que pkill
tiene más reglas de filtrado que killall
. Mi pregunta es, ¿cuál es la diferencia entre:
pkill [signal] name
y
killall [signal] name
He leído que killall
es más efectivo y elimina todos los procesos y subprocesos (y recursivamente) que coinciden con el name
programa. pkill
no hace esto también?
linux
process
kill
process-management
mavillan
fuente
fuente
Respuestas:
Las utilidades
pgrep
ypkill
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 bienpgrep
simplemente imprime una lista de procesos coincidentes,pkill
enviará la señal especificada (oSIGTERM
por defecto) a los procesos. Las opciones comunes y la semántica entrepgrep
ypkill
son útiles cuando desea tener cuidado y primero revise los procesos de comparación de listas conpgrep
, luego proceda a eliminarlos conpkill
.pgrep
ypkill
se proporcionan por el los procps paquete, que también proporciona otras/proc
utilidades del sistema de archivos, tales comops
,top
,free
,uptime
entre otros.El
killall
comando es proporcionado por el paquete psmisc , y difiere depkill
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 seakillall
algo más seguro de usar en comparación conpkill
. 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
), mientraspkill
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".fuente
killall -u <username> -r <process>
opkill <process> -U <uid>
lo quekillall
me facilita mucho el uso.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 los altamente reutilizablespgrep
. Eliminan los procesos de la misma manera, y ninguno mata de forma recursiva, aunque conpgrep
, puede seleccionar por sesión (por tty, think setsid) o grupo de procesos (think control de trabajo).fuente
Una diferencia es que
killall
toma el nombre exacto del proceso como argumento, mientras quepkill
puede tomar un nombre parcial o completo.Puede consultar esta pregunta para conocer en profundidad sobre pkill
fuente
killall
- Eliminar procesos por nombre. Utilice elkillall
comando para enviar una señal a uno o más procesos que coincidan con los criterios de selección, como el nombre del comando, los procesos propiedad de un usuario específico o todos los procesos de todo el sistema.pkill
- enviará la señal especificada (por defecto SIGTERM) a cada proceso en lugar de enumerarlos en stdout.pkill
puede señalar múltiples procesos comokillall
, pero también puede usar criterios de selección avanzados que pueden incluir cualquier combinación de:Comando UID Terminal principal
fuente