GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo elimino todos los procesos de un usuario usando su UID?

Usa pkill -U UID o pkill -u UID o nombre de usuario en lugar de UID. A veces skill -u USERNAME puede funcionar, otra herramienta es killall -u USERNAME .

Skill era específico de Linux y ahora está desactualizado, y pkill es más portátil (Linux, Solaris, BSD).

pkill permite UID numéricos y simbólicos, efectivos y reales http://man7.org/linux/man-pages/man1/pkill.1.html

pkill - ... procesos de señal basados ​​en el nombre y otros atributos

    -u, --euid euid,...
         Only match processes whose effective user ID is listed.
         Either the numerical or symbolical value may be used.
    -U, --uid uid,...
         Only match processes whose real user ID is listed.  Either the
         numerical or symbolical value may be used.

La página de manual de la habilidad dice que solo se permite usar el nombre de usuario, no la identificación del usuario:http://man7.org/linux/man-pages/man1/skill.1.html

habilidad, snice... Estas herramientas son obsoletas e intratables. La sintaxis del comando está mal definida. Considere usar killall, pkill

  -u, --user user
         The next expression is a username.

killall no está marcado como obsoleto en Linux, pero tampoco funcionará con UID numérico; único nombre de usuario:http://man7.org/linux/man-pages/man1/killall.1.html

killall - matar procesos por nombre

   -u, --user
         Kill only processes the specified user owns.  Command names
         are optional.

Creo que cualquier utilidad utilizada para encontrar procesos en el estilo /proc (procfs) de Linux/Solaris utilizará la lista completa de procesos (haciendo algo de readdir de /proc ). Creo que iterarán sobre /proc subcarpetas digitales y verifique que coincidan todos los procesos encontrados.

Para obtener una lista de usuarios, use getpwent (obtendrá un usuario por llamada).

Las herramientas skill (procps y procps-ng) y killall (psmisc) usan getpwnam llamada de biblioteca para analizar el argumento de -u y solo se analizará el nombre de usuario. pkill (procps &procps-ng) usa tanto atol como getpwnam para analizar -u /-U argumento y permitir el especificador de usuario tanto numérico como textual.


Si pasa -1 como argumento de ID de proceso a kill comando de shell o el kill C, luego la señal se envía a todos los procesos a los que puede llegar, lo que en la práctica significa todos los procesos del usuario que ejecuta el kill comando o llamada al sistema.

su -c 'kill -TERM -1' bob

En C (se omite la comprobación de errores):

if (fork() == 0) {
    setuid(uid);
    signal(SIGTERM, SIG_DFL);
    kill(-1, SIGTERM);
}

Si la función pkill no está disponible en su distribución UNIX/Linux, puede ejecutar el siguiente comando como usuario root:

ps -ef | grep username | grep -v grep | awk '{print $2}' | xargs kill

donde nombre de usuario es el usuario cuyos procesos desea eliminar


Linux
  1. Cómo crear un usuario de Linux usando Ansible

  2. ¿Cómo eliminar todos los procesos propiedad del `usuario` en Centos 7?

  3. ¿Cómo ordenar los archivos por sus permisos usando Ls?

  4. Elimine todos los procesos de un usuario específico a través de SSH

  5. Cómo matar procesos en ejecución en Linux

Cómo matar procesos Zombie en Linux

Cómo matar procesos Zombie en Ubuntu

Cómo matar procesos en Linux usando kill, killall y pkill

Cómo eliminar todos los procesos devueltos por pgrep

¿Cómo elimino todas las pantallas?

¿Cómo elimino los procesos anteriores a t?