Sé que pkilltiene 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 killalles más efectivo y elimina todos los procesos y subprocesos (y recursivamente) que coinciden con el nameprograma. pkillno hace esto también?
linux
process
kill
process-management
mavillan
fuente
fuente

Respuestas:
Las utilidades
pgrepypkillse 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 bienpgrepsimplemente imprime una lista de procesos coincidentes,pkillenviará la señal especificada (oSIGTERMpor defecto) a los procesos. Las opciones comunes y la semántica entrepgrepypkillson útiles cuando desea tener cuidado y primero revise los procesos de comparación de listas conpgrep, luego proceda a eliminarlos conpkill.pgrepypkillse proporcionan por el los procps paquete, que también proporciona otras/procutilidades del sistema de archivos, tales comops,top,free,uptimeentre otros.El
killallcomando es proporcionado por el paquete psmisc , y difiere depkilleso, 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,--exactse puede especificar para que también requiera coincidencias exactas para nombres de más de 15 caracteres. Esto hace que seakillallalgo 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.killalltambién soporta expresiones regulares de nombres de proceso, a través de la-r,--regexpopción.Hay otras diferencias también. El
killallcomando, por ejemplo, tiene opciones para unir procesos por edad (-o,--older-thany-y,--younger-than), mientraspkillque se le puede decir que solo mate procesos en un terminal específico (a través de la-topción). Claramente, entonces, los dos comandos tienen nichos específicos.Tenga en cuenta que el
killallcomando 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,
killallsigue la semántica "matar procesos por nombre".fuente
killall -u <username> -r <process>opkill <process> -U <uid>lo quekillallme facilita mucho el uso.pkilles 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
killalltoma el nombre exacto del proceso como argumento, mientras quepkillpuede tomar un nombre parcial o completo.Puede consultar esta pregunta para conocer en profundidad sobre pkill
fuente
killall- Eliminar procesos por nombre. Utilice elkillallcomando 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.pkillpuede 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