Короткий ответ
kill отправляет сигнал по числовому PID, pkill — по совпадению имени процесса или другим атрибутам (без явного PID), killall — по точному имени исполняемого файла; все три по умолчанию посылают SIGTERM, если сигнал не указан явно.
Как это работает подробнее
kill — это обёртка над системным вызовом kill(2), которой нужен конкретный идентификатор процесса; pkill и killall используют procfs или библиотеку для поиска процессов по шаблону имени или другим критериям (пользователь, терминал) и затем сами вызывают kill(2) для каждого найденного PID.
Пример кода
commands.sh
pgrep -a nginx # посмотреть, что попадёт под шаблон
pkill -TERM -f "nginx: worker"Что использовать на практике
- Практика. pkill/killall удобны, когда нужно остановить все копии процесса с одинаковым именем (например, все worker-процессы), но перед использованием стоит сначала выполнить pgrep или pkill с флагом -l/--signal 0 в режиме просмотра, чтобы убедиться, что под шаблон не попали лишние процессы.
Подводные камни
- Риск. Частая ошибка — выполнить killall с общим именем вроде python или node на многопользовательском сервере и случайно остановить чужие процессы, не относящиеся к задаче.