pgrepИ pkillкоммунальные услуги были введены в компании Sun Solaris 7 и, как отметил g33klord , они берут образец в качестве аргумента , который сопоставляется с именами запущенных процессов. Пока pgrepпросто печатает список совпадающих процессов, pkillотправит указанный сигнал (или SIGTERMпо умолчанию) процессам. Общие параметры и семантика между pgrepи pkillудобны, когда вы хотите быть осторожными и сначала просмотреть процессы сопоставления списков pgrep, а затем приступить к их уничтожению pkill. pgrepи pkillпредоставляются в PROCPS пакет, который также предоставляет другую /procфайловую систему утилита, такие как ps, top, free, uptimeсреди других.
Команда killallпредоставляется пакетом psmisc и отличается pkillтем, что по умолчанию она точно соответствует имени аргумента (до первых 15 символов) при определении процессов, на которые будут отправляться сигналы. Опция -e, --exactможет быть указана, чтобы также требовать точных совпадений для имен длиннее 15 символов. Это делает killallболее безопасным использование по сравнению с pkill. Если указанный аргумент содержит /символы slash ( ), он интерпретируется как имя файла, и процессы, выполняющие этот конкретный файл, будут выбраны в качестве получателей сигнала. killallтакже поддерживает регулярные выражения имен процессов, через -r, --regexpвариант.
Есть и другие отличия. killallКоманды, например , имеют опции для согласования процессов по возрасту ( -o, --older-thanи -y, --younger-than), в то время как pkillможно сказать только процессы глушения на конкретный терминале (через -tопцию). Очевидно, что две команды имеют определенные ниши.
Обратите внимание, что killallкоманда в системах, происходящих от Unix System V (в частности , Solaris от Sun , IBM AIX от IBM и HP-UX от HP ), убивает все процессы, убиваемые конкретным пользователем, эффективно отключая систему, если она запускается пользователем root.
Утилиты Linux psmisc были портированы на BSD (и в расширении Mac OS X ), поэтому killallследует семантика «уничтожить процессы по имени».