Der pgrep
und pkill
Dienstprogramme wurden in Solaris 7 von Sun eingeführt und nehmen, wie g33klord feststellte, ein Muster als Argument, das mit den Namen laufender Prozesse abgeglichen wird. Während pgrep
gibt lediglich eine Liste passender Prozesse aus, pkill
sendet das angegebene Signal (oder SIGTERM
standardmäßig) zu den Prozessen. Die gemeinsamen Optionen und Semantik zwischen pgrep
und pkill
ist praktisch, wenn Sie vorsichtig sein und zuerst die Listenabgleichsprozesse mit pgrep
überprüfen möchten , dann fahren Sie fort, sie mit pkill
zu töten . pgrep
und pkill
werden vom Paket procps bereitgestellt, das auch andere /proc
bereitstellt Dateisystemprogramme wie ps
, top
, free
, uptime
unter anderem.
Die killall
Der Befehl wird vom psmisc-Paket bereitgestellt und unterscheidet sich von pkill
dadurch, dass es standardmäßig genau mit dem Argumentnamen (bis zu den ersten 15 Zeichen) übereinstimmt, wenn bestimmt wird, an welche Prozesse Signale gesendet werden. Die -e
, --exact
kann angegeben werden, um auch exakte Übereinstimmungen für Namen mit mehr als 15 Zeichen zu verlangen. Das ergibt killall
etwas sicherer in der Anwendung im Vergleich zu pkill
. Wenn das angegebene Argument einen Schrägstrich (/
) Zeichen, wird das Argument als Dateiname interpretiert und Prozesse, die diese bestimmte Datei ausführen, werden als Signalempfänger ausgewählt. killall
unterstützt auch den regulären Ausdrucksabgleich von Prozessnamen über -r
, --regexp
Option.
Es gibt auch andere Unterschiede. Der killall
Der Befehl hat beispielsweise Optionen zum Abgleichen von Prozessen nach Alter (-o
, --older-than
und -y
, --younger-than
), während pkill
kann angewiesen werden, nur Prozesse auf einem bestimmten Terminal zu beenden (über den -t
Möglichkeit). Es ist also klar, dass die beiden Befehle spezifische 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), tötet alle Prozesse, die von einem bestimmten Benutzer beendet werden können und das System effektiv herunterfahren, wenn sie von root ausgeführt werden.
Die Linux-Dienstprogramme psmisc wurden auf BSD (und in der Erweiterung Mac OS X) portiert, daher killall
Es folgt die Semantik "Prozesse nach Namen beenden".
pkill
ist derjenige, der es wert ist, zukünftigen Generationen beigebracht zu werden, sowohl wegen der Filter, die Sie erwähnen, als auch wegen der Tatsache, dass er mit dem hochgradig wiederverwendbaren pgrep
gepaart ist . Sie beenden Prozesse auf die gleiche Weise, und keiner beendet rekursiv – allerdings mit pgrep
, können Sie nach Sitzung (per-tty, denken Sie an setsid) oder Prozessgruppe (denken Sie an Jobsteuerung) auswählen.
Ein Unterschied besteht darin, dass killall
Nehmen Sie den genauen Namen des Prozesses als Argument, während pkill
kann einen teilweisen oder vollständigen Namen annehmen.
Sie können diese Frage weiterleiten, um mehr über pkill zu erfahren