Объясняя значение термина «Процесс» простыми словами, можно сказать, что это запущенный экземпляр любого приложения или программы в вашей системе. Вы можете одновременно запускать несколько приложений, например, просматривать веб-страницы, слушать музыку на своем терминале и т. д. С этими приложениями связано множество фоновых процессов, которые запускаются пользователем.
Каждое приложение или программа, которая работает в вашей системе, создает несколько процессов, связанных с вашим единственным приложением. Иногда это может быть проблемой, и избавление от этих процессов — единственный вариант, который у вас есть.
«Уничтожение» процесса — это одна из полезных опций, которую Linux предоставляет вам для остановки текущих процессов, будь то процесс переднего плана или фоновый процесс. В этой статье мы рассмотрим такие команды, как kill
, pkill
и killall
для принудительного завершения любого процесса в системе.
Зачем убивать процесс?
Понимание концепции уничтожения процесса важно, прежде чем двигаться дальше в этом руководстве. Уничтожение может показаться очень жестоким способом выражения концепции, но в переносном смысле это означает принудительное прерывание процесса.
Итак, зачем прерывать или завершать текущий процесс? Когда в фоновом режиме запущено несколько процессов, все или некоторые из них могут работать со сбоями и вызывать сбои в работе системы. Это задерживает выполнение текущих задач, поскольку неисправный процесс может на некоторое время заморозить систему.
Иногда завершение всех неправильно работающих процессов кажется единственным вариантом восстановить нормальное состояние системы. Linux позволяет завершить процесс, используя pid
или имя процесса.
Используя команду pgrep
Большинство пользователей Linux знакомы с этой командой grep
. Команду pgrep
можно использовать в похожих строках grep
.
pgrep
при использовании отображает запущенного процесса pid
, как указано в команде. Эта команда окажется очень полезной при использовании команды pkill
.
Общий синтаксис:
pgrep [options] [pattern]
Важные параметры, доступные с помощью pgrep
команды
Вариант | Описание |
-u | список идентификаторов процессов, принадлежащих определенному пользователю |
-c | подсчитать количество соответствующих процессов |
-I | перечислить только имена процессов |
-a | список полный путь имени процесса |
Давайте продемонстрируем использование команды pgrep
на примере.
pgrep -u gaurav gnome
Опция -u
позволяет вам перечислить pids
процессов, принадлежащих определенному пользователю. В данном случае, пользователю gaurav.
Вывод:
gaurav@ubuntu:~$ pgrep -u gaurav gnome
1752
1755
1909
1922
2021
2576
4279
gaurav@ubuntu:~$
По мере продвижения по этому уроку команда pgrep
поможет нам подтвердить, был ли процесс завершен или все еще выполняется.
Перейдем теперь к команде pkill
и ее исполнению.
Использование команды pkill
Вы можете использовать команду pkill
в Linux, чтобы убить процесс, используя имя процесса. Даже если вы не знаете имя pid
какого-то процесса, даже тогда вы можете убить этот конкретный процесс, используя команду pkill
.
Процессы могут быть указаны с их полным именем или частичным именем при использовании команды pkill
. Даже если вы введете частичное имя процесса, команда pkill
сопоставит все запущенные процессы с соответствующим именем, которое вы ввели в команде.
Синтаксис:
pkill [options][process_name_pattern]
Пример:
Давайте отобразим текущие запущенные процессы с помощью команды top
. Вы также можете использовать команду ps
для вывода списка процессов.
top
top - 14:24:02 up 3:12, 1 user, load average: 0.29, 0.48, 0.58
Tasks: 221 total, 1 running, 172 sleeping, 0 stopped, 1 zombie
%Cpu(s): 5.6 us, 1.0 sy, 0.0 ni, 92.9 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 3928240 total, 610456 free, 2233152 used, 1084632 buff/cache
KiB Swap: 4083708 total, 3378884 free, 704824 used. 1187268 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4077 gaurav 20 0 3312128 673480 118360 S 19.6 17.1 15:13.23 Web Content
3712 gaurav 20 0 3953008 453544 116476 S 4.0 11.5 9:28.39 MainThread
2010 gaurav 20 0 4084232 111096 45024 S 1.7 2.8 3:14.85 gnome-shell
1197 root 20 0 1039612 33704 22988 S 1.0 0.9 3:04.42 Xorg
1426 couchdb 20 0 3772396 16908 2520 S 0.7 0.4 1:50.83 beam.smp
3288 gaurav 20 0 722480 25048 18272 S 0.7 0.6 0:06.84 gnome-terminal-
3915 gaurav 20 0 2804900 231524 111228 S 0.7 5.9 0:54.42 Web Content
4146 gaurav 20 0 3017924 245304 120604 S 0.7 6.2 2:01.21 Web Content
4417 gaurav 20 0 2964208 234396 119160 S 0.7 6.0 0:59.90 Web Content
4860 gaurav 20 0 3066800 372920 132544 S 0.7 9.5 0:48.20 Web Content
16007 gaurav 20 0 41944 3780 3116 R 0.7 0.1 0:00.28 top
Использование команды top
отобразит несколько процессов на вашем терминале. Давайте попробуем отобразить процесс с определенным именем. Мы используем команду grep
для отображения процесса, имя которого соответствует строке ‘mongo’.
top | grep -i mongo
Примечание: здесь я использовал опцию -i, чтобы сделать поиск нечувствительным к регистру.
Вывод этой команды отобразит процессы, соответствующие имени «mongo».
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.22 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.25 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.27 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.29 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.31 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.33 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.36 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.38 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.40 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.43 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.45 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.48 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.3 0.1 1:03.49 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.52 mongod
1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.54 mongod
1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.57 mongod
Теперь мы воспользуемся командой pkill
для завершения процесса с именем «mongo».
pkill mongo
Эта команда теперь убьет процесс mongo. Мы можем подтвердить, был ли процесс принудительно завершен, используя команду pgrep
, которая отображает pid
запущенного процесса в соответствии с критериями, указанными пользователем.
gaurav@ubuntu:~$ pgrep mongo
gaurav@ubuntu:~$
Эта команда не вернет никакого значения. Это подтверждает, что процесс ‘mongo’ теперь завершен с помощью команды pkill
.
Параметры, часто используемые с командой pkill
При использовании команды pkill
нам понадобятся указанные опции для правильного и легкого использования команды pkill
.
Параметры | Описание |
-f | сопоставлять с полными аргументами, включая пробелы, кавычки, специальные символы |
-u | для информирования процесса pkill о необходимости соответствия процессу, запущенному указанным пользователем |
-1 | перезагружает процесс |
-9 | убивает процесс |
-15 | изящно прерывает процесс |
Давайте рассмотрим еще один пример команды pkill
, использующей опцию -f
.
В настоящее время на терминале выполняются две команды, как показано ниже.
ping bbc.com
ping youtube.com
Оба процесса инициируются командой ping
. Теперь предположим, что мы хотим завершить только один процесс «ping youtube.com», тогда нам нужно использовать опцию -f
с командой pkill
, которая завершает процесс с определенным именем, включая пробелы и кавычки из имени процесса.
Команда:
gaurav@ubuntu:~$ pkill -f "ping youtube.com"
gaurav@ubuntu:~$
Результат:
gaurav@ubuntu:~$ ping youtube.com
PING youtube.com (142.250.67.206) 56(84) bytes of data.
64 bytes from bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30.9 ms
64 bytes from bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=2 ttl=117 time=121 ms
64 bytes from bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 time=86.5 ms
64 bytes from bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=207 ttl=117 time=105 ms
Terminated
gaurav@ubuntu:~$
В данном случае процесс «ping youtube.com
» завершен, а «ping bbc.com
» все еще выполняется на терминале.
В противном случае, если бы мы использовали эту команду pkill ping
, то это привело бы к завершению обоих процессов ping
, что нежелательно.
Сигналы, используемые с командой pkill
pkill
заставляет процесс завершиться, отправляя этому процессу определенный сигнал. Существует три возможных сигнала, которые команда pkill
может отправить процессу в зависимости от команды, которую дает пользователь.
Ниже приведен список доступных сигналов.
Сигнал | Спецификация |
1 (HUP ) | перезагружает указанный процесс |
9 (KILL ) | убивает указанный процесс |
15 (TERM ) | мягко останавливает или прерывает указанный процесс |
В этом уроке мы будем в значительной степени полагаться на KILL
сигнал. Давайте рассмотрим несколько примеров, чтобы лучше понять это.
Использование команды pgrep
для получения pid
соответствующий имени apache.
gaurav@ubuntu:~$ pgrep apache
1218
10402
10403
gaurav@ubuntu:~$
pkill -KIll apache
ИЛИ вы также можете использовать команду с цифрами (например, 1, 9, 15)
pkill -9 apache
Обе команды, показанные выше, завершат процесс apache. Подтверждаем командой еще раз pgrep
.
gaurav@ubuntu:~$ pgrep apache
gaurav@ubuntu:~$
Поскольку команда pgrep
не возвращает никаких выходных данных, это доказывает, что процесс apache был завершен.
Заключение
В этом уроке мы узнали о команде pkill
и о том, как она используется для завершения процесса, используя имя процесса напрямую. Мы также узнали о команде pgrep
, которая используется для получения идентификатора процесса, запущенного любым конкретным пользователем. Команда позволяет pgrep
нам перепроверить, завершен ли процесс.