GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie beende ich alle Prozesse eines Benutzers mit seiner UID?

Verwenden Sie pkill -U UID oder pkill -u UID oder Benutzername statt UID. Manchmal skill -u USERNAME kann funktionieren, ein anderes Tool ist killall -u USERNAME .

Skill war Linux-spezifisch und ist jetzt veraltet, und pkill ist portabler (Linux, Solaris, BSD).

pkill erlaubt sowohl numerische als auch symbolische UIDs, effektive und echte http://man7.org/linux/man-pages/man1/pkill.1.html

pkill - ... signalisiert Prozesse basierend auf Namen und anderen Attributen

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

Die Manpage von Skill sagt, dass es nur erlaubt ist, den Benutzernamen zu verwenden, nicht die Benutzer-ID:http://man7.org/linux/man-pages/man1/skill.1.html

skill, snice ... Diese Tools sind veraltet und nicht portierbar. Die Befehlssyntax ist schlecht definiert. Erwägen Sie die Verwendung von killall, pkill

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

killall ist unter Linux nicht als veraltet markiert, funktioniert aber auch nicht mit numerischen UIDs; einziger Benutzername:http://man7.org/linux/man-pages/man1/killall.1.html

killall - Prozesse nach Namen beenden

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

Ich denke, jedes Dienstprogramm, das zum Auffinden von Prozessen im Linux/Solaris-Stil /proc (procfs) verwendet wird, verwendet die vollständige Liste der Prozesse (dabei wird ein Readdir von /proc ausgeführt). ). Ich denke, sie werden über /proc iterieren digitale Unterordner und prüfen Sie jeden gefundenen Prozess auf Übereinstimmung.

Um eine Benutzerliste zu erhalten, verwenden Sie getpwent (es wird ein Benutzer pro Anruf empfangen).

skill (procps &procps-ng) und killall (psmisc) Tools verwenden beide getpwnam Bibliotheksaufruf zum Analysieren des Arguments von -u Option, und nur der Benutzername wird analysiert. pkill (procps &procps-ng) verwendet sowohl atol als auch getpwnam, um -u zu parsen /-U -Argument und erlauben sowohl numerische als auch textuelle Benutzerspezifizierer.


Wenn Sie -1 als Prozess-ID-Argument entweder an kill übergeben Shell-Befehl oder den kill C-Funktion, dann wird das Signal an alle Prozesse gesendet, die es erreichen kann, was in der Praxis alle Prozesse des Benutzers bedeutet, der den kill ausführt Befehl oder Systemaufruf.

su -c 'kill -TERM -1' bob

In C (Fehlerprüfung weggelassen):

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

Wenn die pkill-Funktion auf Ihrer UNIX-/Linux-Distribution nicht verfügbar ist, können Sie den folgenden Befehl als Root-Benutzer ausführen:

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

wobei Benutzername der Benutzer ist, dessen Prozesse Sie löschen möchten


Linux
  1. Wie kann man alle Prozesse mit einem bestimmten Teilnamen beenden?

  2. Wie beendet man alle Hintergrundprozesse in zsh?

  3. So beenden Sie alle PHP-FPM-Prozesse in einer einzigen Befehlszeile

  4. Wie verwendet man Strg+C, um alle Hintergrundprozesse zu beenden, die in einem Bash-Skript gestartet wurden?

  5. Wie lösche ich alle Bildschirme?

So beenden Sie Zombie-Prozesse in Linux

So töten Sie Zombie-Prozesse in Ubuntu

So beenden Sie Prozesse in Linux mit kill, killall und pkill

Beenden Sie alle Prozesse, die sich auf eine Anwendung beziehen

Wie beende ich Prozesse, die älter als t sind?

Wie kann ich alle gestoppten Jobs beenden?