После использования только простых 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.
Пожалуйста, будьте осторожны с «killall». На некоторых системах (я забываю, что), killall убивает все процессы. Он будет молча игнорировать аргументы и полностью остановить вашу систему.
, если вы активируете / etc / bash_completion, после killall <part_of_process_name> и вкладки hit - auto завершает имя процесса из списка запущенных процессов
Если вы посмотрите на параметры обеих программ, вы увидите, что они оба делают примерно одно и то же, но разными способами.
pkill будет выполнять сопоставление по различным атрибутам процесса (CMD , PID, PPID, UID ...) и отправит данный сигнал каждому процессу, который соответствует. (Для CMD используется регулярное выражение, для других это строка). pkill не является интерактивным, но лучше для пакетных программ.
killall выполнит сопоставление имени процесса (comm) или пользователя (пользователя), а не всей командной строки. Аргумент используется как простая строка и должен соответствовать всему значению «comm» (также существует опция --regexp, чтобы изменить это). У killall есть опции -interactive и -younger-than, которые не имеют pkill.
Существует также killall5 из SysV-дней и портирован на другие варианты UNIX (предположительно под пакетом Ubuntu sysutils «). Это по-разному по-старому. Это часто использовалось внутри сценариев инициализации для выключения или изменения однопользовательского режима.