GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu zabít všechny procesy uživatele pomocí jejich UID

Použijte pkill -U UID nebo pkill -u UID nebo uživatelské jméno místo UID. Někdy skill -u USERNAME může fungovat, dalším nástrojem je killall -u USERNAME .

Skill byl specifický pro linux a je nyní zastaralý a pkill je přenosnější (Linux, Solaris, BSD).

pkill umožňuje číselné i symbolické UID, efektivní a skutečné http://man7.org/linux/man-pages/man1/pkill.1.html

pkill - ... signální procesy založené na názvu a dalších atributech

    -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.

Manuální stránka dovedností říká, že je povoleno používat pouze uživatelské jméno, nikoli uživatelské ID:http://man7.org/linux/man-pages/man1/skill.1.html

skill, snice ... Tyto nástroje jsou zastaralé a nepřenosné. Syntaxe příkazu je špatně definovaná. Zvažte použití killall, pkill

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

killall není v Linuxu označen jako zastaralý, ale také nebude fungovat s číselným UID; pouze uživatelské jméno:http://man7.org/linux/man-pages/man1/killall.1.html

killall - zabít procesy podle názvu

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

Myslím, že jakýkoli nástroj používaný k nalezení procesu ve stylu Linux/Solaris /proc (procfs) použije úplný seznam procesů (provádí nějaký readdir z /proc ). Myslím, že budou iterovat přes /proc digitální podsložky a zkontrolujte shodu všech nalezených procesů.

Chcete-li získat seznam uživatelů, použijte getpwent (získá jednoho uživatele na hovor).

nástroje skill (procps &procps-ng) a killall (psmisc) používají oba getpwnam volání knihovny pro analýzu argumentu -u a bude analyzováno pouze uživatelské jméno. pkill (procps &procps-ng) používá atol i getpwnam k analýze -u /-U argument a povolit jak číselný, tak textový uživatelský specifikátor.


Pokud předáte -1 jako argument ID procesu buď do kill příkaz shell nebo kill C, pak je signál odeslán všem procesům, na které může dosáhnout, což v praxi znamená všechny procesy uživatele, na kterém běží kill příkaz nebo systémové volání.

su -c 'kill -TERM -1' bob

V C (kontrola chyb vynechána):

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

Pokud není funkce pkill ve vaší distribuci UNIX / Linux k dispozici, můžete jako uživatel root spustit následující příkaz:

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

kde uživatelské jméno je uživatel, jehož procesy chcete smazat


Linux
  1. Jak vytvořit uživatele Linuxu pomocí Ansible

  2. Jak zabít všechny procesy vlastněné `uživatelem` na Centos 7?

  3. Jak zabít běžící procesy v Linuxu

  1. Jak zabít proces v Linuxu pomocí příkazu?

  2. Jak zabít všechny procesy s daným částečným názvem?

  3. Jak zabít všechny procesy na pozadí v zsh?

  1. Jak zabít všechny procesy PHP-FPM v jediném příkazovém řádku

  2. Jak zabít všechny procesy vrácené pgrep

  3. Jak získat uživatelské jméno z uid