Я знаю, что pkill
имеет больше правил фильтрации, чем killall
. У меня вопрос, в чем разница между:
pkill [signal] name
а также
killall [signal] name
Я читал, что killall
это более эффективно и уничтожает все процессы и подпроцессы (и рекурсивно), которые соответствуют name
программе. pkill
не делает это тоже?
linux
process
kill
process-management
mavillan
источник
источник
Ответы:
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
следует семантика «уничтожить процессы по имени».источник
killall -u <username> -r <process>
илиpkill <process> -U <uid>
делаетkillall
его намного проще для меня.pkill
это тот, который стоит преподавать будущим поколениям, как из-за фильтров, которые вы упомянули, так и из-за того, что он в сочетании с возможностью многократного использованияpgrep
. Они убивают процессы одинаково, и ни один не убивает рекурсивно - хотя с помощьюpgrep
, вы можете выбрать по сеансу (pertty, think setsid) или группе процессов (Think Job Control).источник
Единственное отличие состоит в том, что
killall
в качестве аргумента принимается точное имя процесса, тогда какpkill
может принимать частичное или полное имя.Вы можете обратиться к этому вопросу, чтобы узнать подробно о pkill
источник
killall
- убить процессы по имени. Используйтеkillall
команду, чтобы отправить сигнал одному или нескольким процессам, соответствующим критериям выбора, таким как имя команды, процессы, принадлежащие конкретному пользователю, или всем общесистемным процессам.pkill
- отправит указанный сигнал (по умолчанию SIGTERM) каждому процессу, вместо того, чтобы вывести их на стандартный вывод.pkill
может сигнализировать о нескольких процессах, напримерkillall
, но также может использовать расширенные критерии выбора, которые могут включать в себя любую комбинацию:Родительский терминал UID команды
источник