Ich weiß, dass pkill
es mehr Filterregeln als gibt killall
. Meine Frage ist, was ist der Unterschied zwischen:
pkill [signal] name
und
killall [signal] name
Ich habe gelesen, dass dies killall
effektiver ist und alle Prozesse und Unterprozesse (und rekursiv) beendet, die mit dem name
Programm übereinstimmen . pkill
macht das nicht auch
linux
process
kill
process-management
Mavillan
quelle
quelle
Antworten:
Die Dienstprogramme
pgrep
undpkill
wurden in Solaris 7 von Sun eingeführt und verwenden, wie g33klord feststellte , ein Muster als Argument, das mit den Namen der ausgeführten Prozesse abgeglichen wird. Währendpgrep
lediglich eine Liste übereinstimmender Prozesse gedruckt wird,pkill
wird das angegebene Signal (oderSIGTERM
standardmäßig) an die Prozesse gesendet . Die gemeinsamen Optionen und Semantiken zwischenpgrep
und sindpkill
nützlich, wenn Sie vorsichtig sein und zuerst die Prozesse für den Listenabgleich mit überprüfenpgrep
und dann mit beenden möchtenpkill
.pgrep
undpkill
werden durch die die zur Verfügung gestellten procps Paket, das auch andere bietet/proc
Dateisystemdienstprogramme, wie zum Beispielps
,top
,free
,uptime
unter anderem.Der
killall
Befehl wird vom psmisc- Paket bereitgestellt und unterscheidet sichpkill
darin, dass er standardmäßig genau mit dem Argumentnamen übereinstimmt (bis zu den ersten 15 Zeichen), wenn festgelegt wird, an welche Prozesse Signale gesendet werden. Die-e
,--exact
Option kann auch angegeben werden , um für Namen exakte Übereinstimmungen benötigen länger als 15 Zeichen. Dies macht die Verwendungkillall
etwas sicherer alspkill
. Wenn das angegebene Argument Schrägstriche (/
) enthält , wird das Argument als Dateiname interpretiert und Prozesse, die diese bestimmte Datei ausführen, werden als Signalempfänger ausgewählt.killall
unterstützt auch reguläre Ausdrücke von Prozessnamen, über die-r
,--regexp
Option.Es gibt auch andere Unterschiede. Der
killall
Befehl verfügt beispielsweise über Optionen zum Abgleichen von Prozessen nach Alter (-o
,--older-than
und-y
,--younger-than
), während festgelegt werdenpkill
kann, dass nur Prozesse auf einem bestimmten Terminal abgebrochen werden sollen (über die-t
Option). Es ist klar, dass die beiden Befehle bestimmte Nischen haben.Beachten Sie, dass der
killall
Befehl auf Systemen, die von Unix System V abstammen (insbesondere Solaris von Sun , AIX von IBM und HP-UX von HP ), alle Prozesse beendet, die von einem bestimmten Benutzer beendet werden können, und das System effektiv herunterfährt, wenn es von root ausgeführt wird.Die Linux-Dienstprogramme psmisc wurden auf BSD (und in der Erweiterung Mac OS X ) portiert , daher
killall
folgt die Semantik "Kill-Prozesse nach Namen".quelle
killall -u <username> -r <process>
oderpkill <process> -U <uid>
was diekillall
Verwendung für mich erheblich erleichtert.pkill
ist diejenige, die es wert ist, zukünftige Generationen zu unterrichten, sowohl aufgrund der von Ihnen erwähnten Filter als auch aufgrund der Tatsache, dass sie mit den hochgradig wiederverwendbaren Filtern gepaart sindpgrep
. Sie beenden Prozesse auf die gleiche Weise und beenden sie auch nicht rekursiv. Mitpgrep
können Sie jedoch nach Sitzung (Per-tty, think setsid) oder Prozessgruppe (think job control) auswählen.quelle
Ein Unterschied besteht darin, dass
killall
der genaue Name des Prozesses als Argument verwendet wird, während derpkill
Name teilweise oder vollständig sein kann.Sie können diese Frage ansprechen, um mehr über pkill zu erfahren
quelle
killall
- Prozesse namentlich beenden. Verwenden Sie denkillall
Befehl, um ein Signal an einen oder mehrere Prozesse zu senden, die den Auswahlkriterien entsprechen, z. B. Befehlsname, Prozesse eines bestimmten Benutzers oder alle systemweiten Prozesse.pkill
- sendet das angegebene Signal (standardmäßig SIGTERM) an jeden Prozess, anstatt sie auf stdout aufzulisten.pkill
kann mehrere Prozesse wie signalisierenkillall
, kann aber auch erweiterte Auswahlkriterien verwenden, die eine beliebige Kombination von:Befehl UID Parent Terminal
quelle