Ich kenne kill
Befehl , und meistens verwenden wir einfach kill -9
Um einen Prozess zwangsweise zu beenden, gibt es viele andere Signale, die mit kill
verwendet werden können . Aber ich frage mich, was die Anwendungsfälle von pkill
sind und killall
, falls es bereits einen Kill-Befehl gibt.
Führen Sie pkill
aus und killall
benutze den kill
Befehl in ihrer Umsetzung? Ich meine, sie sind nur Wrapper über kill
oder sie haben ihre eigene Implementierung?
Ich würde auch gerne wissen, wie pgrep
Befehl erhält die Prozess-ID aus dem Prozessnamen.
Verwenden alle diese Befehle dieselben zugrunde liegenden Systemaufrufe? Gibt es aus Sicht der Leistung einen Unterschied, welcher ist schneller?
Akzeptierte Antwort:
Der kill
Der Befehl ist ein sehr einfacher Wrapper für kill
Systemaufruf , die nur Prozess-IDs (PIDs) kennt. pkill
und killall
sind auch Wrapper zum kill
Systemaufruf , (eigentlich an die libc-Bibliothek, die den Systemaufruf direkt aufruft), kann aber die PIDs für Sie ermitteln, basierend auf Dingen wie dem Prozessnamen, dem Eigentümer des Prozesses, der Sitzungs-ID usw.
Wie pkill
und killall
Arbeit kann mit ltrace
eingesehen werden oder strace
auf sie. Unter Linux lesen beide den /proc
durch Dateisystem und durchläuft für jede gefundene PID (Verzeichnis) den Pfad, um einen Prozess anhand seines Namens oder anderer Attribute zu identifizieren. Wie das gemacht wird, ist technisch gesehen Kernel- und System-spezifisch. Im Allgemeinen lesen sie aus /proc/<PID>/stat
die als 2. Feld den Befehlsnamen enthält. Für pkill -f
und pgrep
Untersuchen Sie /cmdline
Eintrag für den proc-Eintrag jeder PID.
pkill
und pgrep
Verwenden Sie die readproc
Systemaufruf, wohingegen killall
nicht. Ich kann nicht sagen, ob es einen Leistungsunterschied gibt:Sie müssen das selbst messen.