Как остановить запущенный процесс linux

Убиваем процессы в Linux — команды ps, kill и killall

Под процессом мы будем понимать запущенную в системе копию программы. Например, если вы открыли три окна калькулятора (например, gcalctool), это значит, что вы запустили три процесса.

Находим PID зависшего процесса

Каждый процесс в Linux имеет свой идентификатор, называемый PID. Перед тем, как выполнить остановку процесса, нужно определить его PID. Для этого воспользуемся командами ps и grep. Команда ps предназначена для вывода списка активных процессов в системе и информации о них. Команда grep запускается одновременно с ps (в канале) и будет выполнять поиск по результатам команды ps. Вывести список всех процессов можно, выполнив в командной строке:

Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда grep. Например, чтобы найти информацию о процессе с именем gcalctool выполните команду:

Команда grep выполнит поиск по результатам команды ps и на экран будут выведены только те строки, которые содержат строку (слово) gcalctool. Здесь есть одна интересная деталь, например, если у вас не запущено приложение gcalctool, то после выполнения ps axu | grep gcalctool вы получите:

То есть мы получили сам процесс grep, так как в качестве параметра команде мы указали слово gcalctool, и grep нашел сам себя в выводе команды ps.

Если процесс gcalctool запущен, то мы получим:

Здесь нас интересует строка: «yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool». Число 25609 и есть идентификатор (PID) процесса gcalctool.

Есть еще один более простой способ узнать PID процесса — это команда pidof, которая принимает в качестве параметра название процесса и выводит его PID. Пример выполнения команды pidof:

«Убиваем» процесс командой kill

Когда известен PID процесса, мы можем убить его командой kill. Команда kill принимает в качестве параметра PID процесса. Например, убьем процесс с номером 25609:

Вообще команда kill предназначена для посылки сигнала процессу. По умолчанию, если мы не указываем какой сигнал посылать, посылается сигнал SIGTERM (от слова termination — завершение). SIGTERM указывает процессу на то, что необходимо завершиться. Каждый сигнал имеет свой номер. SIGTERM имеет номер 15. Список всех сигналов (и их номеров), которые может послать команда kill, можно вывести, выполнив kill -l. Чтобы послать сигнал SIGKILL (он имеет номер 9) процессу 25609, выполните в командой строке:

Сигнал SIGTERM может и не остановить процесс (например, при перехвате или блокировке сигнала), SIGKILL же выполняет уничтожение процесса всегда, так как его нельзя перехватить или проигнорировать.

Убиваем процессы командой killall

Команда killall в Linux предназначена для «убийства» всех процессов, имеющих одно и то же имя. Это удобно, так как нам не нужно знать PID процесса. Например, мы хотим закрыть все процессы с именем gcalctool. Выполните в терминале:

Команда killall, также как и kill, по умолчанию шлет сигнал SIGTERM. Чтобы послать другой сигнал нужно воспользоваться опцией -s. Например:

Заключение

Некоторые процессы не удается остановить под обычным пользователем. Например, если процесс был запущен от имени пользователя root или от имени другого пользователя системы, то команды kill и killall нужно выполнять от имени суперпользователя, добавляя sudo (в Ubuntu):

Читайте также:  Монтировать образы iso windows

Бывают ситуации, когда вы работаете в графическом интерфейсе (например, GNOME) и вам не удается открыть эмулятор терминала, чтобы остановить зависший процесс. Тогда можно переключиться на виртуальную консоль клавишами Ctrl+Alt+F1, залогиниться в ней и выполнять команды уже из нее. А потом перейти обратно, нажав Ctrl+Alt+F7.

Справку по использованию любой команды можно получить командой man:

Источник

Как завершить процесс в Linux. Команды kill, pkill,killall

В операционных системах Linux есть команда Kill, прерывающая процесс. Она позволяет серверу продолжать работу после серьезных изменений и обновлений без необходимости перезагрузки. Это одно из важнейших преимуществ Linux и одна из причин того, почему она установлена на 90% серверов в мире. Команда kill отправляет процессу специальный сигнал. Ее можно запустить различными способами, непосредственно из командной строки или из скрипта.

Синтаксис

Использование команды kill из /usr/bin предоставляет дополнительную возможность прервать процесс по его имени при помощи pkill. Стандартный синтаксис команды kill следующий:

Для команды kill существует около 60 сигналов, но основные значения следующие:

Имя сигнала Номер сигнала Действие
SIGHUP 1 Отключить
SIGKILL 9 “Убить”
SIGTERM 15 Прервать

SIGTERM используется по умолчанию. Это самый безопасный способ прерывания процесса, когда приложению отправляется запрос, который может быть обработан или проигнорирован. SIGHUP — менее безопасный способ. SIGKILL — наименее безопасный вариант, прерывание процесса без сохранения, этот сигнал не может быть проигнорирован или перехвачен.
Идентификаторы процессов
Чтобы прервать (“убить”) процесс, нам нужно знать его идентификатор (Process ID или PID). Он генерируется автоматически при запуске каждой программы и есть у каждого процесса в Linux. Первый процесс, запускаемый при загрузке Linux — init, поэтому в большинстве случаев ему присваивается идентификатор ‘1’.

Init — системный процесс, его нельзя прервать таким образом. При получении сигнала он сам решает, позволить ли себя прервать, таким образом, команда kill становится просто запросом на отключение системы. Это сделано для того, чтобы исключить случайное прерывание системных процессов.

Увидеть все запущенные процессы и соответствующие им идентификаторы можно при помощи следующей команды:

Для получения идентификатора конкретного процесса можно воспользоваться командой pidof, которой в качестве аргумента задается его имя.

Также можно сделать фильтрацию с помощью grep

Примеры

Прежде чем перейти непосредственно к исполнению команды kill, следует сделать ряд важных замечаний:

  • Пользователь может прервать любой свой процесс.
  • Пользователь не может прервать процесс другого пользователя..
  • Суперпользователь (root) может прервать системный процесс и процесс любого пользователя.
  • Пользователь не может прервать системный процесс

Чтобы “убить” процесс с указанным PID, нужно выполнить следующую команду (приведен пример для процесса mysqld из предыдущего раздела):

Будет “убит” процесс с PID=1684, то есть mysqld.

Можно использовать не только номер, но и название сигнала/ Например, для запроса на прерывание, который можно обработать или проигнорировать:

Аналогично, команда kill -SIGKILL PID эквивалентна команде # kill -9 PID

Для прерывания нескольких процессов можно указать их идентификаторы через пробел:

Прерывание процесса по имени. Команда pkill

Для прерывания процесса по имени, а не идентификатору, используется команда pkill. Нужно внимательно вводить имя процесса, так как прерывание не того процесса может привести к сбоям:

Если у процесса слишком много экземпляров и дочерних процессов, существует команда killall, которой в качестве аргумента также задается имя процесса.

Для прерывания всех экземпляров mysqld с дочерними процессами воспользуйтесь следующей командой:

Далее можно проверить состояние процесса (запущен он или нет), например:

Читайте также:  Почтовый клиент для mac os по умолчанию

Команда killall

Еще одна полезная команда для завершения процессов, это команда killall. Эта команда также как и pkill может завершить все процессы имеющие одно имя

А также весьма полезна бывает когда нужно завершить все процессы какого нибудь пользователя.

Заключение

Мы разобрали, как прерывать процессы в Linux и рассмотрели несколько используемых для этого команд. Эти команды следует применять с большой осторожностью, так как неосмотрительное прерывание процесса может привести к системным сбоям или потере важных данных. Для более подробной информации, различных вариантов передаваемых сигналов и других опций можно обратиться к соответствующим man-страницам.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Использование консоли Linux для завершения процессов

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

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

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

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

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

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

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

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

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

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

Команда завершения

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

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

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

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

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

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

Команда pkill

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

Читайте также:  Роль терминального сервера windows 2016

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

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

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

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

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

Команда killall

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

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

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

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

  • s (секунды)
  • m (минуты)
  • h (часы)
  • d (дни)
  • w (недели)
  • M (месяцы, примечание, заглавная «М»)
  • y (годы)

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

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

killall -o 1d sshd

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

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

Источник

Оцените статью