В чем разница между «killall» и «pkill»?

После использования только простых kill <some_pid> в системах Unix в течение многих лет я узнал pkill у младшего опытного сотрудника Linux.

Вскоре я принял Linux-путь, pgrep - и pkill - через много дней и ночей, через замедление и условия гонки. Все было хорошо и хорошо.

Но теперь я ничего не вижу, кроме killall. В How-to, похоже, упоминается только killall, и я не уверен, что это какая-то параллельная разработка, или если killall является преемником pkill или что-то еще.

Кажется, он функционирует как более целевая pkill, но я уверен, что мне что-то не хватает.

Может ли Ubuntu / Debian-savvy 1 объясняет, когда (или почему) killall следует использовать, особенно если его следует использовать в предпочтении pkill (когда pkill часто кажется более простым, потому что я могу быть sloppier с совпадением имен, по крайней мере по умолчанию ).

Говоря о killall, я не думаю о том, что на некоторых Unix-системах (Solaris, AIX,?) будут убиты все пользовательские процессы. Вот описание этой версии из man-страницы для IBM AIX:

Команда killall отменяет все начатые вами процессы, за исключением тех, которые производят процесс killall. Эта команда обеспечивает удобное средство для отмены всех процессов, создаваемых оболочкой, которую вы контролируете. При запуске пользователем root команда killall отменяет все процессы отмены, кроме тех процессов, которые его запускали. Если указано несколько сигналов, действует только последний.

1 «коллега» - это бесплатное обновление от «co-worker», так что может быть. 2 Первоначально я думал, что это Linux или Debian, но некоторые источники говорят, что Linux killall получен из Unix с BSD.

1
задан 13 March 2015 в 22:55

3 ответа

Пожалуйста, будьте осторожны с «killall». На некоторых системах (я забываю, что), killall убивает все процессы. Он будет молча игнорировать аргументы и полностью остановить вашу систему.

7
ответ дан 25 May 2018 в 22:52
  • 1
    Это неправда. killall без каких-либо аргументов ничего не сделает, и killall не будет игнорировать аргументы. kill -9 -1 может убить вашу систему, а также killall -9 -1. Но не только killall [program] – Thomas Ward♦ 30 July 2012 в 19:45
  • 2
    Это верно для систем SysV, как уже упоминалось в первоначальном вопросе. – alanc 16 October 2012 в 07:59

, если вы активируете / etc / bash_completion, после killall <part_of_process_name> и вкладки hit - auto завершает имя процесса из списка запущенных процессов

3
ответ дан 25 May 2018 в 22:52
  • 1
    То же авто-завершение будет выполнено с помощью pgrep / pkill. Что-то, что я обычно делаю, это pkill plug<tab>, чтобы убить флеш-плагин для firefox, когда я знаю, что у меня нет ничего, что я хочу использовать некоторое время, но все же хочу активно использовать firefox. Это функция оболочки, а не разница между killall и pgrep / pkill. – Arcege 22 February 2011 в 16:52
  • 2
    Я не сказал, что это разница - просто приятная функция, чтобы не искать PID, имена процессов и т. Д. – jet 22 February 2011 в 18:29

Если вы посмотрите на параметры обеих программ, вы увидите, что они оба делают примерно одно и то же, но разными способами.

pkill будет выполнять сопоставление по различным атрибутам процесса (CMD , PID, PPID, UID ...) и отправит данный сигнал каждому процессу, который соответствует. (Для CMD используется регулярное выражение, для других это строка). pkill не является интерактивным, но лучше для пакетных программ.

killall выполнит сопоставление имени процесса (comm) или пользователя (пользователя), а не всей командной строки. Аргумент используется как простая строка и должен соответствовать всему значению «comm» (также существует опция --regexp, чтобы изменить это). У killall есть опции -interactive и -younger-than, которые не имеют pkill.

Существует также killall5 из SysV-дней и портирован на другие варианты UNIX (предположительно под пакетом Ubuntu sysutils «). Это по-разному по-старому. Это часто использовалось внутри сценариев инициализации для выключения или изменения однопользовательского режима.

2
ответ дан 25 May 2018 в 22:52
  • 1
    Нет, ни pkill, ни killall не должны использоваться в скриптах только в интерактивном режиме и с осторожностью. – geirha 24 February 2011 в 14:21

Другие вопросы по тегам:

Похожие вопросы: