pgrep
a pkill
utility byly představeny v Solaris 7 od Sunu a jak poznamenal g33klord, berou jako argument vzor, který se shoduje s názvy běžících procesů. Zatímco pgrep
pouze vytiskne seznam odpovídajících procesů pkill
odešle zadaný signál (nebo SIGTERM
standardně) k procesům. Společné možnosti a sémantika mezi pgrep
a pkill
se hodí, když chcete být opatrní a nejprve zkontrolovat procesy přiřazování seznamů pomocí pgrep
, pak pokračujte v jejich zabíjení pomocí pkill
. pgrep
a pkill
jsou poskytovány balíkem procps, který také poskytuje další /proc
nástroje systému souborů, jako je ps
, top
, free
, uptime
mimo jiné.
killall
příkaz je poskytován balíčkem psmisc a liší se od pkill
ve výchozím nastavení se přesně shoduje s názvem argumentu (až do prvních 15 znaků) při určování procesů, kterým budou signály odeslány. -e
, --exact
lze zadat také požadavek na přesné shody pro názvy delší než 15 znaků. To dělá killall
poněkud bezpečnější použití ve srovnání s pkill
. Pokud zadaný argument obsahuje lomítko (/
) znaků, argument je interpretován jako název souboru a jako příjemci signálu budou vybrány procesy běžící v tomto konkrétním souboru. killall
také podporuje shodu názvů procesů s regulárními výrazy prostřednictvím -r
, --regexp
možnost.
Existují i další rozdíly. killall
příkaz má například možnosti pro párování procesů podle věku (-o
, --older-than
a -y
, --younger-than
), zatímco pkill
může být řečeno, aby zabil procesy pouze na konkrétním terminálu (prostřednictvím -t
volba). Je tedy zřejmé, že tyto dva příkazy mají specifické výklenky.
Všimněte si, že killall
příkaz na potomcích systémů z Unix System V (zejména Solaris od Sunu, AIX od IBM a HP-UX od HP) zabije všechny procesy, které lze zabít konkrétním uživatelem, což efektivně vypne systém, pokud je spouští root.
Linuxové nástroje psmisc byly portovány na BSD (a v rozšíření Mac OS X), proto killall
následuje sémantika „zabít procesy podle názvu“.
pkill
je ten, který stojí za to učit budoucí generace, a to jak kvůli filtrům, které zmiňujete, tak kvůli skutečnosti, že je spárován s vysoce znovupoužitelným pgrep
. Zabíjejí procesy stejným způsobem a ani jeden nezabíjí rekurzivně — i když s pgrep
, můžete vybrat podle relace (per-tty, think setsid) nebo skupiny procesů (think job control).
jeden rozdíl je, že killall
vezměte přesný název procesu jako argument, zatímco pkill
může mít částečné nebo úplné jméno.
Na tuto otázku se můžete podívat, abyste se do hloubky dozvěděli o pkill