Quiero eliminar todos los procesos en ejecución de un usuario en particular desde un script de shell o código nativo en un sistema Linux.
¿Tengo que leer el directorio / proc y buscarlos?
¿Algunas ideas? ¿Existe una asignación dinámica de los pids bajo UID en Linux? ¿No está esto en el proceso?
Si no, ¿dónde se mantiene esta lista? ¿Debería leerlo? Además, ¿dónde está la lista estática de todos los UID en el sistema para poder validar que este usuario existe y luego proceder a eliminar todos los procesos que se ejecutan en él?
setuid()
elija un proceso en ejecución .Respuestas:
Use
pkill -U UID
opkill -u UID
o nombre de usuario en lugar de UID. A vecesskill -u USERNAME
puede funcionar, otra herramienta eskillall -u USERNAME
.La habilidad era específica de Linux y ahora está desactualizada, 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
La página de manual de habilidad dice que está permitido usar solo nombre de usuario, no ID de usuario: http://man7.org/linux/man-pages/man1/skill.1.html
killall no está marcado como desactualizado en Linux, pero tampoco funcionará con UID numérico; solo nombre de usuario: http://man7.org/linux/man-pages/man1/killall.1.html
Creo que cualquier utilidad utilizada para encontrar procesos en Linux / Solaris style / proc (procfs) usará una lista completa de procesos (haciendo algunos readdir de
/proc
). Creo que iterarán sobre/proc
subcarpetas digitales y verificarán cada proceso encontrado para encontrar coincidencias.Para obtener una lista de usuarios, use
getpwent
(obtendrá un usuario por llamada).Las herramientas skill (procps & procps-ng) y killall (psmisc) usan la
getpwnam
llamada a la biblioteca para analizar el argumento de la-u
opción, y solo se analizará el nombre de usuario.pkill
(procps & procps-ng) usa tanto atol como getpwnam para analizar-u
/-U
argumentar y permitir el especificador de usuario numérico y textual.fuente
killall -u USERNAME
trabajó como encantoSi pasa -1 como argumento de ID de proceso al
kill
comando de shell o lakill
función C , la señal se envía a todos los procesos que puede alcanzar, lo que en la práctica significa todos los procesos del usuario que ejecuta elkill
comando o syscall.En C (error de verificación omitido):
fuente
Si la función pkill no está disponible en su distribución UNIX / Linux, puede ejecutar el siguiente comando como usuario root:
donde nombre de usuario es el usuario cuyos procesos desea eliminar
fuente
pkill -U username
.fuente
Esto me ha funcionado bien. Puede encontrar todos los pid de los procesos por nombre de usuario haciendo
ps U <username>
e ir desde allí. Prueba esto:fuente