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.