Завершение процесса

Последнее обновление: 15.03.2024

Завершение процессов представляет одну из наиболее распространенных задач при работе процессами. Для завершения процесса Linux предоставляет ряд команд: kill, pkill и killall. При использовании одной из этих команд можно отправить процессу определенный сигнал. Сигнал представляет команду процессу. Всего доступно 32 сигнала, но из них только четыре являются общими:

Сигнал

Значение

Описание

SIGHUP

1

Используется при изменении файла конфигурации. Позволяет процессу применить новые настройки конфигурации

SIGKILL

9

Принудиьтельно завершает процесс. Так как при использовании этого сигнала есть риск потери несохраненных данные из открытых файлов, то данный сигнал используется только в том случае, если процесс не останавливается после отправки ему сигнала 15.

SIGTERM

15

Запрашивает завершение процесса. Процесс может игнорировать это.

SIGUSR1

30

Посылает определенный пользователем сигнал

kill

Команда 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

Команда 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

Команда pkill завершает процесс на основании его имени или атрибутов.

Приведу основные опции, которые может принимать команда:

  • -i, --ignore-case: при соответствии шаблону не учитывается регистр

  • -n, --newest: выбирает наиболее новые процессы

  • -o, --oldest: выбирает наиболее старые процессы

  • -O, --older <seconds>: выбирает процессы, которые запущены как минимум seconds секунд назад

  • -P, --parent <PPID,...>: выбирает только дочерние процессы определенного родительского процесса с идентификаторомPPID

  • -u, --euid <ID,...>: выбирает процессы по определенному пользователю

  • -x, --exact: устанавливает точное соответствие имени команды

Например, завершим все процессы бразера chrome:

pkill chrome
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850