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