Estoy familiarizado con kill
comando, y la mayoría de las veces solo usamos kill -9
para matar un proceso a la fuerza, hay muchas otras señales que se pueden usar con kill
. Pero me pregunto cuáles son los casos de uso de pkill
y killall
, si ya hay un comando de matar.
Haz pkill
y killall
usa el kill
comando en su implementación? Quiero decir, son solo envoltorios sobre kill
o tienen su propia implementación?
También me gustaría saber cómo pgrep
El comando obtiene la identificación del proceso del nombre del proceso.
¿Todos estos comandos utilizan las mismas llamadas al sistema subyacente? ¿Hay alguna diferencia desde el punto de vista del rendimiento, cuál es más rápido?
Respuesta aceptada:
El kill
El comando es un contenedor muy simple para kill
llamada al sistema , que solo conoce los ID de proceso (PID). pkill
y killall
también son envoltorios para kill
llamada al sistema , (en realidad, a la biblioteca libc que invoca directamente la llamada del sistema), pero puede determinar los PID por usted, en función de elementos como el nombre del proceso, el propietario del proceso, la identificación de la sesión, etc.
Cómo pkill
y killall
el trabajo se puede ver usando ltrace
o strace
en ellos. En Linux, ambos leen el /proc
sistema de archivos, y para cada pid (directorio) encontrado, recorre la ruta de una manera de identificar un proceso por su nombre u otros atributos. Cómo se hace esto es técnicamente hablando, kernel y sistema específico. En general, leen de /proc/<PID>/stat
que contiene el nombre del comando como segundo campo. Para pkill -f
y pgrep
examine el /cmdline
entrada para cada entrada de proceso de PID.
pkill
y pgrep
usa el readproc
llamada al sistema, mientras que killall
no es. No podría decir si hay una diferencia de rendimiento:tendrás que comparar eso por tu cuenta.