GNU/Linux >> Linux Esercitazione >  >> Linux

Come uccido tutti i processi di un utente usando il loro UID

Usa pkill -U UID o pkill -u UID o nome utente invece di UID. A volte skill -u USERNAME potrebbe funzionare, un altro strumento è killall -u USERNAME .

Skill era specifico per Linux ed è ora obsoleto, mentre pkill è più portabile (Linux, Solaris, BSD).

pkill consente UID sia numerici che simbolici, effettivi e reali http://man7.org/linux/man-pages/man1/pkill.1.html

pkill - ... segnala i processi in base al nome e ad altri attributi

    -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 pagina man di skill dice che è consentito usare solo il nome utente, non l'id utente:http://man7.org/linux/man-pages/man1/skill.1.html

abilità, furbizia... Questi strumenti sono obsoleti e introvabili. La sintassi del comando è mal definita. Prendi in considerazione l'utilizzo di killall, pkill

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

killall non è contrassegnato come obsoleto in Linux, ma non funzionerà nemmeno con UID numerico; solo nome utente:http://man7.org/linux/man-pages/man1/killall.1.html

killall - termina i processi per nome

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

Penso che qualsiasi utility utilizzata per trovare processi in stile Linux/Solaris /proc (procfs) utilizzerà l'elenco completo dei processi (facendo un po' di readdir di /proc ). Penso che itereranno su /proc digital sottocartelle e controlla ogni processo trovato per la corrispondenza.

Per ottenere l'elenco degli utenti, usa getpwent (otterrà un utente per chiamata).

skill (procps &procps-ng) e killall (psmisc) usano entrambi getpwnam chiamata alla libreria per analizzare l'argomento di -u opzione e verrà analizzato solo il nome utente. pkill (procps &procps-ng) usa sia atol che getpwnam per analizzare -u /-U argomento e consentire l'identificatore utente sia numerico che testuale.


Se passi -1 come argomento ID processo a kill comando shell o kill C, quindi il segnale viene inviato a tutti i processi che può raggiungere, che in pratica significa tutti i processi dell'utente che eseguono il kill comando o chiamata di sistema.

su -c 'kill -TERM -1' bob

In C (controllo degli errori omesso):

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

Se la funzione pkill non è disponibile sulla tua distribuzione UNIX / Linux, puoi eseguire il seguente comando come utente root:

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

dove username è l'utente che elabora i processi che desideri eliminare


Linux
  1. Come uccidere tutti i processi in background in zsh?

  2. Come terminare tutti i processi restituiti da pgrep

  3. Uccidi tutti i processi relativi a un'applicazione

  4. Come uccido tutti gli schermi?

  5. Come ottenere il nome dell'utente da uid

Come uccidere i processi Zombie in Linux

Come uccidere i processi zombi in Ubuntu

Come uccidere i processi in Linux usando kill, killall e pkill

Come uccidere tutti i processi con un determinato nome parziale?

Come terminare tutti i processi PHP-FPM in un'unica riga di comando

Come utilizzare Ctrl+C per terminare tutti i processi in background avviati in uno script Bash?