GNU/Linux >> Tutoriels Linux >  >> Linux

Comment tuer tous les processus d'un utilisateur à l'aide de son UID

Utilisez pkill -U UID ou pkill -u UID ou nom d'utilisateur au lieu d'UID. Parfois skill -u USERNAME peut fonctionner, un autre outil est killall -u USERNAME .

Skill était spécifique à Linux et est maintenant obsolète, et pkill est plus portable (Linux, Solaris, BSD).

pkill autorise les UID numériques et symboliques, effectifs et réels http://man7.org/linux/man-pages/man1/pkill.1.html

pkill - ... signale les processus basés sur le nom et d'autres attributs

    -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 page de manuel de skill indique qu'il est uniquement permis d'utiliser un nom d'utilisateur, pas un identifiant d'utilisateur :http://man7.org/linux/man-pages/man1/skill.1.html

compétence, snice ... Ces outils sont obsolètes et non portables. La syntaxe de la commande est mal définie. Envisagez d'utiliser le killall, pkill

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

killall n'est pas marqué comme 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

killall - tue les processus par nom

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

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 sous-dossiers numériques et vérifiez la correspondance de chaque processus trouvé.

Pour obtenir la liste des utilisateurs, utilisez getpwent (il obtiendra un utilisateur par appel).

Les outils skill (procps &procps-ng) et killall (psmisc) utilisent tous deux getpwnam appel à la bibliothèque pour analyser l'argument de -u option, et seul le nom d'utilisateur sera analysé. pkill (procps &procps-ng) utilise à la fois atol et getpwnam pour analyser -u /-U argument et autoriser les spécificateurs d'utilisateur numériques et textuels.


Si vous transmettez -1 comme argument d'ID de processus au kill commande shell ou le kill fonction C, alors le signal est envoyé à tous les processus qu'il peut atteindre, ce qui signifie en pratique tous les processus de l'utilisateur exécutant le kill commande ou appel système.

su -c 'kill -TERM -1' bob

En C (vérification d'erreur omise) :

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

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 :

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

où username est l'utilisateur dont vous souhaitez supprimer les processus


Linux
  1. Tuez tous les processus d'un utilisateur spécifique via SSH

  2. Comment tuer les processus en cours d'exécution sous Linux

  3. Comment tuer un processus sous Linux en utilisant la commande ?

  4. Comment utiliser Ctrl+C pour tuer tous les processus d'arrière-plan démarrés dans un script Bash ?

  5. Tuez tous les processus liés à une application

Comment tuer les processus Zombie sous Linux

Comment tuer les processus zombies dans Ubuntu

Comment tuer les processus sous Linux en utilisant kill, killall et pkill

Comment tuer tous les processus renvoyés par pgrep

Comment tuer tous les écrans ?

Comment obtenir le nom de l'utilisateur à partir de l'uid