Je veux tuer tous les processus en cours d'exécution d'un utilisateur particulier à partir d'un script shell ou d'un code natif sur un système Linux.
Dois-je lire le répertoire / proc et rechercher ceux-ci?
Des idées? Existe-t-il un mappage dynamique des pids sous les UID sous Linux? N'est-ce pas dans le proc?
Sinon, où cette liste est-elle maintenue? Dois-je lire? De plus, où se trouve la liste statique de tous les UID du système afin que je puisse valider le fait que cet utilisateur existe, puis supprimer tous les processus s’exécutant?
setuid()
choisis par un processus en cours d'exécution .Réponses:
Utilisez
pkill -U UID
oupkill -u UID
ou nom d'utilisateur au lieu de UID. Parfoisskill -u USERNAME
peut fonctionner, un autre outil estkillall -u USERNAME
.Skill était spécifique à Linux et est maintenant obsolète, et pkill est plus portable (Linux, Solaris, BSD).
pkill autorise à la fois des UID numériques et symboliques, efficaces et réels http://man7.org/linux/man-pages/man1/pkill.1.html
La page de manuel de l'habileté indique s'il est uniquement autorisé d'utiliser un nom d'utilisateur, et non un identifiant: http://man7.org/linux/man-pages/man1/skill.1.html
Killall n'est pas marqué comme étant obsolète sous Linux, mais il ne fonctionnera pas non plus avec l'UID numérique. seul nom d'utilisateur: http://man7.org/linux/man-pages/man1/killall.1.html
Je pense que tout utilitaire utilisé pour trouver un processus dans le style Linux / Solaris / proc (procfs) utilisera la liste complète des processus (en faisant un readdir de
/proc
). Je pense qu'ils vont parcourir/proc
les sous-dossiers numériques et vérifier la correspondance de tous les processus trouvés.Pour obtenir la liste des utilisateurs, utilisez
getpwent
(il y aura un utilisateur par appel).Les outils skill (procps & procps-ng) et killall (psmisc) utilisent l'
getpwnam
appel de la bibliothèque pour analyser l'argument de l'-u
option, et seul le nom d'utilisateur est analysé.pkill
(procps & procps-ng) utilise à la fois atol et getpwnam pour analyser-u
/-U
argument et autoriser le spécificateur d'utilisateur numérique et textuel.la source
killall -u USERNAME
a travaillé comme un charmeSi vous transmettez -1 en tant qu'argument d'ID de processus à la
kill
commande shell ou à lakill
fonction C , le signal est envoyé à tous les processus qu'il peut atteindre, ce qui correspond en pratique à tous les processus de l'utilisateur exécutant lakill
commande ou le syscall.En C (vérification d'erreur omise):
la source
Si la fonction pkill n'est pas disponible sur votre distribution UNIX / Linux, vous pouvez exécuter la commande suivante en tant qu'utilisateur root:
où nom d'utilisateur est l'utilisateur qui est le processus que vous souhaitez supprimer
la source
pkill -U username
.la source
Cela a bien fonctionné pour moi. Vous pouvez trouver tous les pid des processus par nom d'utilisateur en le faisant
ps U <username>
et aller de là. Essaye ça:la source