Я знаком с kill
командой, и большую часть времени мы просто используем kill -9 для принудительного завершения процесса, есть много других сигналов, которые можно использовать kill
. Но мне интересно, каковы случаи использования pkill
и killall
, если уже есть команда kill.
Делать pkill
и killall
использовать kill
команды в их реализации? Я имею в виду, что они просто обертки kill
или у них есть своя реализация?
Также хотелось бы узнать, как pgrep
команда получает идентификатор процесса из имени процесса.
Все ли эти команды используют одни и те же системные вызовы? Есть ли разница с точки зрения производительности, какая из них быстрее?
linux
bash
shell-script
kill
Иджаз Ахмад Хан
источник
источник
kill -9
по умолчанию? -15 (пожалуйста, прекратите) и -1 (модем повесил трубку, пожалуйста, ЧИСТО закрывайте сами) гораздо более вежливы. Во- вторых. Остерегайтесь использования killall на не-linux боксах. Это может вести себя по-другому. (Например, на Солярисе это убивает всех. НЕ ФИЛЬТРИРОВАНО на названиях процессов).Ответы:
Команда
kill
представляет собой очень простую оболочку дляkill
системного вызова , которая знает только об идентификаторах процессов (PID).pkill
иkillall
они также являются обертками дляkill
системного вызова (фактически, для библиотеки libc, которая непосредственно вызывает системный вызов), но могут определять PID для вас на основе таких вещей, как имя процесса, владелец процесса, идентификатор сеанса и т. д.Как
pkill
и какkillall
работать можно увидеть с помощьюltrace
илиstrace
на них. В Linux они оба читают/proc
файловую систему, и для каждого найденного pid (каталога) проходит путь таким образом, чтобы идентифицировать процесс по его имени или другим атрибутам. То, как это делается, технически зависит от ядра и системы. Как правило, они читают из/proc/<PID>/stat
которых содержит имя команды в качестве 2-го поля. Дляpkill -f
иpgrep
проверьте/cmdline
запись для каждой записи процедуры PID.pkill
иpgrep
использоватьreadproc
системный вызов, аkillall
не. Я не могу сказать, есть ли разница в производительности: вам придется оценивать это самостоятельно.источник
kill и killall - это инструменты, которые предоставляют способ убить процесс. Первый по его PID, второй по его имени. pgrep (список) и pkill (уничтожение по умолчанию) - это инструменты, которые обеспечивают способ отправки сообщения процессу по его имени или другим атрибутам, см. http://linux.die.net/man/1/pkill. Подробнее о сигналы: http://linux.die.net/man/7/signal
источник
killall
, используется, чтобы убить процесс по имени? и он использует pgrep для этого? аkillall
также убивает все дочерние процессы, какой сигналkillall
использует по умолчанию?killall
будут уничтожены все процессы, которые вы имеете право уничтожить, поэтому, если вы являетесь пользователем root, вы фактически перезагрузите сервер.killall chromium
убьет процесс хромирования,pgrep chromium
выдаст вам список PID,pkill chromium
убьет хром. killall пошлет сигнал SIGTERM по умолчанию (как pkill)