it-swarm.com.de

Was ist der Unterschied zwischen pkill und killall?

Ich weiß, dass pkill mehr Filterregeln hat als killall. Meine Frage ist, was ist der Unterschied zwischen:

pkill [signal] name

und

killall [signal] name

Ich habe gelesen, dass killall effektiver ist und alle Prozesse und Unterprozesse (und rekursiv) beendet, die mit dem Programm name übereinstimmen. pkill macht das nicht auch?

54
mavillan

Die Dienstprogramme pgrep und pkill wurden in Suns Solaris 7 und as eingeführt g33klord notiert , sie nehmen ein Muster als Argument, das mit den Namen der laufenden Prozesse abgeglichen wird. Während pgrep lediglich eine Liste übereinstimmender Prozesse druckt, sendet pkill das angegebene Signal (oder standardmäßig SIGTERM) an die Prozesse. Die allgemeinen Optionen und die Semantik zwischen pgrep und pkill sind nützlich, wenn Sie vorsichtig sein und zuerst die Listenabgleichprozesse mit pgrep überprüfen und dann mit dem Beenden fortfahren möchten sie mit pkill. pgrep und pkill werden vom Paket procps bereitgestellt, das auch andere /proc - Dateisystemdienstprogramme bereitstellt, z als ps , top , free , uptime unter anderem.

Der Befehl killall wird vom Paket psmisc bereitgestellt und unterscheidet sich von pkill darin, dass er standardmäßig genau mit dem Argumentnamen übereinstimmt (bis zu den ersten 15 Zeichen) Bei der Bestimmung der Prozesse werden Signale an gesendet. Die Option -e, --exact Kann so angegeben werden, dass auch für Namen mit mehr als 15 Zeichen genaue Übereinstimmungen erforderlich sind. Dies macht die Verwendung von killall im Vergleich zu pkill etwas sicherer. 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 die Übereinstimmung regulärer Ausdrücke von Prozessnamen über die Option -r, --regexp.

Es gibt auch andere Unterschiede. Der Befehl killall bietet 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 abzubrechen (über die Option -t). Dann haben die beiden Befehle eindeutig bestimmte Nischen.

Beachten Sie, dass der Befehl killall auf Systemen von Unix System V = (insbesondere Suns Solaris , IBMs AIX und HPs HP-UX ) beendet alle Prozesse, die von einem bestimmten Benutzer beendet werden können, und fährt das System effektiv herunter, wenn es von root ausgeführt wird.

Die Linux-Dienstprogramme psmisc wurden auf [~ # ~] bsd [~ # ~] (und in der Erweiterung Mac OS X portiert. ), daher folgt killall der Semantik "Kill Processes by Name".

49
Thomas Nyman

pkill ist derjenige, der es wert ist, zukünftige Generationen zu unterrichten, sowohl aufgrund der von Ihnen erwähnten Filter als auch der Tatsache, dass er mit dem hoch wiederverwendbaren pgrep gepaart ist. Sie beenden Prozesse auf die gleiche Weise und werden auch nicht rekursiv beendet. Mit pgrep können Sie jedoch nach Sitzung (per-tty, think setsid) oder Prozessgruppe (think job control) auswählen.

14
Gabriel

ein Unterschied besteht darin, dass killall den genauen Namen des Prozesses als Argument verwendet, während pkill einen teilweisen oder vollständigen Namen annehmen kann.

Sie können auf diese Frage verweisen, um mehr über pkill zu erfahren

8
electropoet

killall - Prozesse nach Namen beenden. Verwenden Sie den Befehl killall, um ein Signal an einen oder mehrere Prozesse zu senden, die 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 es auf stdout aufzulisten. pkill kann mehrere Prozesse wie killall signalisieren, kann aber auch erweiterte Auswahlkriterien verwenden, die eine beliebige Kombination von Folgendem umfassen können:

Befehl UID Parent Terminal

1
user196507