Завершение процессов представляет одну из наиболее распространенных задач при работе процессами. Для завершения процесса Linux предоставляет ряд команд: kill, pkill и killall. При использовании одной из этих команд можно отправить процессу определенный сигнал. Сигнал представляет команду процессу. Всего доступно 32 сигнала, но из них только четыре являются общими:
Сигнал | Значение | Описание |
SIGHUP | 1 | Используется при изменении файла конфигурации. Позволяет процессу применить новые настройки конфигурации |
SIGKILL | 9 | Принудиьтельно завершает процесс. Так как при использовании этого сигнала есть риск потери несохраненных данные из открытых файлов, то данный сигнал используется только в том случае, если процесс не останавливается после отправки ему сигнала 15. |
SIGTERM | 15 | Запрашивает завершение процесса. Процесс может игнорировать это. |
SIGUSR1 | 30 | Посылает определенный пользователем сигнал |
Команда kill обеспечивает наиболее распространенный способ отправки сигналов процессам, и вы обнаружите, что ее довольно легко использовать. Эта команда принимает два аргумента: номером или именем сигнала и PID процесса, который надо завершить:
kill [-s sigspec | -n signum] pid
Опция -s
задает имя сигнала, а опция -n
- номер сигнала. Если вы не указаны имя/номер сигнала, kill по умолчанию отправит сигнал 15,
запрашивая завершение процесса.
Поскольку команда принимает идентификатор завершаемого процесса, то нам надо сначала получить этот идентификатор. Например, у нас запущен браузер Chrome, и мы хотим его завершить. Сначала получим идентификатор процесса:
eugene@Eugene:~$ pgrep -l chrome 3822 chrome_crashpad 10848 chrome 10857 chrome_crashpad 10859 chrome_crashpad 10865 chrome 10866 chrome 10868 chrome 10892 chrome 10893 chrome 10904 chrome 11333 chrome 11346 chrome
Обычно запущенное окно браузера представляет первый в списке процессов с именем "chrome". В моем случае - это 10848. Теперь завершим его:
eugene@Eugene:~$ kill 10848
Также можно завершить сразу несколько процессов, указав их идентификаторы через пробел:
kill 10848 3822
Команда killall позволяет более точно указать процессы, которые надо завершить. Среди ее опций можно выделить следующие:
-I
: игнорирует регистр имени процессов
-r
: позволяет указать регулярное выражение, которому должны соответствовать процесс.
-u
: позволяет указать пользователя, процессы которого будут завершены.
Например, завершим работу браузера google chrome:
killall -r chrome
Причем в данном случае "chrome" - это регулярное выражение. Например, завершим процессы, в имени которых есть "chrome_":
eugene@Eugene:~$ pgrep -l chrome 11808 chrome 11817 chrome_crashpad 11819 chrome_crashpad 11825 chrome 11826 chrome 11828 chrome 11853 chrome 11855 chrome 11867 chrome eugene@Eugene:~$ killall -r chrome_ eugene@Eugene:~$ pgrep -l chrome 11808 chrome 11825 chrome 11826 chrome 11828 chrome 11853 chrome 11855 chrome 11867 chrome eugene@Eugene:~$
Команда pkill завершает процесс на основании его имени или атрибутов.
Приведу основные опции, которые может принимать команда:
-i, --ignore-case
: при соответствии шаблону не учитывается регистр
-n, --newest
: выбирает наиболее новые процессы
-o, --oldest
: выбирает наиболее старые процессы
-O, --older <seconds>
: выбирает процессы, которые запущены как минимум seconds секунд назад
-P, --parent <PPID,...>
: выбирает только дочерние процессы определенного родительского процесса с идентификаторомPPID
-u, --euid <ID,...>
: выбирает процессы по определенному пользователю
-x, --exact
: устанавливает точное соответствие имени команды
Например, завершим все процессы бразера chrome:
pkill chrome