Was ist der Unterschied zwischen kill, pkill und killall?

31

Ich kenne mich mit killBefehlen aus und meistens verwenden wir kill -9 nur, um einen Prozess gewaltsam abzubrechen. Es gibt viele andere Signale, die verwendet werden können kill. Aber ich frage mich, was die Anwendungsfälle von pkillund sind killall, wenn es bereits einen Kill-Befehl gibt.

Haben pkillund killalldie Verwendung killBefehl bei der Umsetzung? Ich meine, sie sind nur Wrapper killoder sie haben ihre eigene Implementierung?

Ich möchte auch wissen, wie pgrepBefehl die Prozess-ID vom Prozessnamen abruft.

Verwenden alle diese Befehle dieselben zugrunde liegenden Systemaufrufe? Gibt es aus Sicht der Leistung einen Unterschied, welcher ist schneller?

Ijaz Ahmad Khan
quelle
2
Zwei Dinge: Warum kill -9standardmäßig verwenden? -15 (bitte aufhören) und -1 (Modem hat aufgelegt, bitte SAUBER selbst geschlossen) sind viel höflicher. Zweitens. Vorsicht bei der Verwendung von killall auf Nicht-Linux-Boxen. Es könnte sich anders verhalten. (ZB unter Solaris tötet es alle. NICHT GEFILTERT nach Prozessnamen).
Hennes

Antworten:

31

Der killBefehl ist ein sehr einfacher Wrapper für den kill Systemaufruf , der nur die Prozess-IDs (PIDs) kennt. pkillund killallsind auch Wrapper für den kill Systemaufruf (eigentlich für die libc-Bibliothek, die den Systemaufruf direkt aufruft), können aber die PIDs für Sie anhand von Dingen wie Prozessname, Prozessbesitzer, Sitzungs-ID usw. bestimmen.

Wie pkillund killallArbeit kann mit ltraceoder stracean ihnen gesehen werden. Unter Linux lesen beide das /procDateisystem durch und durchlaufen für jede gefundene pid (Verzeichnis) den Pfad, um einen Prozess anhand seines Namens oder anderer Attribute zu identifizieren. Wie dies gemacht wird, ist technisch gesehen kernel- und systemspezifisch. In der Regel lesen sie aus, aus /proc/<PID>/statwelchem ​​Befehlsnamen das 2. Feld besteht. Für pkill -fund pgrepuntersuchen den /cmdlineEintrag für jeden proc Eintrag des PID.

pkillund pgrepverwenden Sie den readprocSystemaufruf, während killallnicht. Ich kann nicht sagen, ob es einen Leistungsunterschied gibt: Sie müssen das selbst messen.

Otheus
quelle
2

kill und killall sind Werkzeuge, mit denen ein Prozess abgebrochen werden kann. Der erste nach seiner PID, der zweite nach seinem Namen. pgrep (Liste) und pkill (Standardeinstellung kill) sind Tools, mit denen Sie Nachrichten nach Namen oder anderen Attributen an einen Prozess senden können. Weitere Informationen finden Sie unter: http://linux.die.net/man/1/pkill Signale: http://linux.die.net/man/7/signal

dervishe
quelle
Meinen Sie damit killall, dass ein Prozess mit seinem Namen beendet wird? und es verwendet pgrep für diesen Zweck? und killalltötet auch alle untergeordneten Prozesse,? Welches Signal killallwird standardmäßig verwendet?
Ijaz Ahmad Khan
3
... es sei denn , Sie auf Solaris sind, wobei in diesem Fall killalltöten alle Prozesse , die Sie das Recht zu töten, so dass , wenn Sie root, sind Sie effektiv den Server neu zu starten.
Jenny D
1
yep: killall chromiumtötet den Chromprozess , pgrep chromiumgibt Ihnen die PID-Liste, pkill chromiumtötet Chrom. killall wird standardmäßig SIGTERM - Signal (als pkill) senden
dervishe