¿Cuál es la diferencia entre kill, pkill y killall?

31

Estoy familiarizado con el killcomando, y la mayoría de las veces usamos kill -9 para matar un proceso con fuerza, hay muchas otras señales con las que se puede usar kill. Pero me pregunto cuáles son los casos de uso de pkilly killall, si ya hay un comando kill.

¿ Usar pkilly killallusar el killcomando en su implementación? Quiero decir, ¿son solo envoltorios killo tienen su propia implementación?

También me gustaría saber cómo el pgrepcomando obtiene la identificación del proceso del nombre del proceso.

¿Todos estos comandos usan las mismas llamadas de sistema subyacentes? ¿Hay alguna diferencia desde el punto de vista del rendimiento, cuál es más rápido?

Ijaz Ahmad Khan
fuente
2
Dos cosas: ¿Por qué usar kill -9por defecto? -15 (por favor, deténgase) y -1 (el módem se ha colgado, por favor, LIMPIEZA usted mismo) son mucho más educados. En segundo lugar. Tenga cuidado con el uso de killall en cajas que no sean de Linux. Podría comportarse de manera diferente. (Por ejemplo, en solaris mata a todos. NO FILTRADO en los nombres de proceso).
Hennes
Relacionado: unix.stackexchange.com/questions/91527/…
Byte Commander

Respuestas:

31

El killcomando es un contenedor muy simple para la kill llamada al sistema , que solo conoce los ID de proceso (PID). pkilly killalltambién son envoltorios para la kill llamada al sistema (en realidad, a la biblioteca libc que invoca directamente la llamada al sistema), pero pueden determinar los PID por usted, en función de cosas como el nombre del proceso, el propietario del proceso, la identificación de la sesión, etc.

Cómo pkilly el killalltrabajo se puede ver usando ltraceo stracesobre ellos. En Linux, ambos leen a través del /procsistema de archivos y, por cada pid (directorio) encontrado, atraviesan la ruta de 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 /proc/<PID>/statque contiene el nombre del comando como el segundo campo. Para pkill -fy pgrepexaminar la /cmdlineentrada para cada entrada de proceso de PID.

pkilly pgrepusa la readprocllamada al sistema, mientras killallque no. No podría decir si hay una diferencia de rendimiento: tendrá que compararla por su cuenta.

Oteo
fuente
2

kill y killall son herramientas que proporcionan una forma de matar un proceso. El primero por su PID, el segundo por su nombre. pgrep (list) y pkill (kill por defecto) son herramientas que proporcionan una forma de enviar mensajes a un proceso por su nombre u otros atributos, consulte: http://linux.die.net/man/1/pkill Para obtener más información sobre señales: http://linux.die.net/man/7/signal

dervishe
fuente
¿Quieres decir que killallse usa para matar un proceso por su nombre? y usa pgrep para este propósito? y killalltambién mata todos los procesos secundarios,? ¿Qué señal killallutiliza por defecto?
Ijaz Ahmad Khan
3
... a menos que esté en Solaris, en cuyo caso killallmatará todos los procesos que tiene derecho a matar, de modo que si es root, reiniciará efectivamente el servidor.
Jenny D
1
Sí: killall chromiummatará el proceso de cromo, pgrep chromiumle dará la lista PID, pkill chromiummatará el cromo. killall enviará por defecto la señal SIGTERM (como pkill)
dervishe