Как убить процессы с терминала Linux

Фатмавати Ахмад Заенури/Shutterstock.com

Иногда уничтожение процесса — единственный способ избавиться от него. Несмотря на резкое название, «убить» процесс просто означает «заставить его выйти». Вот как это сделать из командной строки Linux или macOS.

Что такое процесс?

Запуск таких программ, как ваш веб-браузер, фоновые процессы, связанные с вашей рабочей средой, и системные службы Linux — все это процессы.

Вы можете объединить процессы в две группы:

  • Основные процессы — это те, которые были запущены или запущены пользователем. Они могут быть в окне терминала или графическим приложением.
  • Фоновые процессы — это все процессы, которые запускаются автоматически и не взаимодействуют с пользователями. Они не ожидают ввода от пользователей и не представляют результаты или вывод для них. Фоновые процессы — это такие вещи, как сервисы и демоны.

Если процессы на переднем плане находятся перед персоналом театра и актерами, то фоновые процессы — это закулисная команда «за кадром».

Когда процессы ведут себя неправильно или работают неправильно, они могут слишком долго загружать процессор, использовать вашу оперативную память или войти в жесткий вычислительный цикл и перестать отвечать на запросы. Графические приложения могут отказаться отвечать на щелчки мышью. Терминальные приложения могут никогда не вернуть вас в командную строку.

Гуманный ответ

«Убить» процесс просто означает «заставить процесс выйти». Это может быть необходимо, если процесс отказывается отвечать.

Linux предоставляет команды kill , pkill и killall , чтобы позволить вам сделать это. Эти команды могут использоваться с любым типом процесса, графической или командной строки, переднего плана или фона.

Команда убийства

Чтобы использовать kill , вы должны знать идентификатор процесса (PID) процесса, который хотите завершить. Команда ps может использоваться для поиска PID процесса.

Чтобы ps осуществлял поиск по всем процессам, используйте параметр -e (все процессы). Желательно передавать результаты через less , их будет довольно много. Введите ps , пробел, -e , пробел, | (символ канала), другой пробел, а затем введите less . Нажмите Enter, чтобы выполнить команду.

 ps -e | меньше 

Это даст вам список процессов, который выглядит как на скриншоте ниже. Вы можете искать вперед в less , используя клавишу /, и вы можете искать в обратном направлении, используя клавишу ? .

Чтобы перейти к интересующему вас процессу, перенаправьте выходные данные из ps через grep и укажите имя или часть имени процесса.

 ps -e | grep shutter 

Найдя PID процесса, который вы хотите завершить, передайте его команде kill в качестве параметра. Чтобы завершить процесс shutter , определенный предыдущей командой, используйте эту команду:

 убить 2099 

Команда kill является тихим убийцей - она ​​не дает никаких отзывов, если она прошла успешно.

Команда pkill

Команда pkill позволяет вам убить процесс или процессы по имени. Вам не нужно идентифицировать процесс по PID. Чтобы использовать pkill , вы предоставляете поисковый запрос, который pkill использует для проверки списка запущенных процессов. Соответствующие процессы прекращаются. Таким образом, вы должны быть уверены, что вы правильно написали этот поисковый термин.

В качестве сети безопасности вы можете использовать команду pgrep , прежде чем использовать команду pkill . Команда pgrep также принимает поисковый запрос. В нем будет указан PID каждого процесса, который соответствует поисковому запросу. Это безопасно, потому что pgrep не будет выдавать какой-либо сигнал уничтожения процессам, и если вы неправильно наберете поисковый запрос, вы не убьете другой процесс по ошибке. Прежде чем передать его pkill , вы можете убедиться, что поисковый термин правильно продуман. И pkill , и pgrep обрабатывают поисковый запрос одинаково. Их обращение настолько схоже, что они используют одну и ту же справочную страницу.

Предположим, что есть процесс с «subq» в его названии. Мы будем использовать ps -u dave | grep , чтобы заглянуть за занавес. Вы можете видеть, что «subq» будет соответствовать этому процессу и только этому процессу. Это было просто, чтобы вы могли увидеть полное название процесса.

 ps -u dave | grep subq 

Давайте предположим, что наш пользователь не сделал этого; все, что они знают, - это имя процесса, содержащее подстроку «subq». Они используют pgrep , чтобы проверить, что существует только одно совпадение с поисковым термином. Затем они используют этот поисковый термин с pkill .

 pgrep subq
 pkill subq 

Вы можете использовать pkill , чтобы убить несколько процессов одновременно. Здесь пользователь запускает pgrep , чтобы проверить, сколько процессов запущено Chrome. Они используют pkill , чтобы убить их всех. Затем они проверяют с помощью pgrep , что все они были удалены.

 pgrep chrome 
 pkill chrome 
 pgrep chrome 

Если запущено несколько процессов с одним и тем же именем, но вы не хотите уничтожать их всех, вы можете использовать pgrep с параметром -f (командная строка), чтобы определить, какие процесс есть какой. Простой пример - два процесса ping . Вы хотите убить одного из них, но не другого. Вы можете использовать их командные строки, чтобы различать их. Обратите внимание на использование кавычек для переноса параметра командной строки.

 pgrep -f "ping 192.168.4.22" 
 pkill -f "ping 192.168.4.22" 

Команда killall

Предупреждение . В операционных системах Solaris и OpenIndiana команда killall будет уничтожать все принадлежащие вам процессы . Если вы являетесь пользователем root или если вы ввели sudo killall , вы перезагрузите компьютер! Во время исследования этой статьи это поведение было подтверждено последней версией OpenIndiana Hipster 2018.10.

Команда killall работает аналогично команде pkill , но с определенным отличием. Вместо передачи поискового запроса команде необходимо указать точное имя процесса.

Вы не можете предоставить частичное совпадение с именем процесса; Вы должны предоставить полное имя процесса, как показано:

 killall shutt 
 killall shutter 

Опция -y (младше) позволяет вам завершать процессы, которые выполнялись на меньше , чем указанный период. Период указан числами, за которыми следует одна из следующих единиц:

  • с (секунды)
  • м (минуты)
  • ч (часы)
  • д (дней)
  • Вт (недели)
  • М (месяцы, примечание, заглавная «М»)
  • у (лет)

Чтобы убить процесс с именем ana , который только что был запущен, и оставить все старые экземпляры ana работающими, вы можете использовать следующие параметры с killall , если бы вы отреагировали в течение двух минут:

 killall -y 2m ana 

Опция -o (старше чем) позволяет вам убивать процессы, которые выполнялись дольше указанного периода. Эта команда уничтожит все соединения ssh , которые работали более суток:

 killall -o 1d sshd 

Не будь слишком счастливым

Эти команды позволят вам точно и безопасно идентифицировать и завершать ошибочные процессы.

Всегда будь осторожен. Во-первых, убедитесь, что процесс, который вы собираетесь убить, действительно тот, который вам нужен. Во-вторых, проверьте дважды - будьте осторожны и убедитесь, что целевой процесс - это тот, который вы хотите завершить. Приступить к прекращению процесса, как только вы будете удовлетворены.

Оцените статью
TutoryBird.Ru
Добавить комментарий