kill параметры в linux
Как завершить процесс в 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, следует сделать ряд важных замечаний:
Чтобы “убить” процесс с указанным PID, нужно выполнить следующую команду (приведен пример для процесса mysqld из предыдущего раздела):
Будет “убит” процесс с PID=1684, то есть mysqld.
Можно использовать не только номер, но и название сигнала/ Например, для запроса на прерывание, который можно обработать или проигнорировать:
Для прерывания нескольких процессов можно указать их идентификаторы через пробел:
Прерывание процесса по имени. Команда pkill
Для прерывания процесса по имени, а не идентификатору, используется команда pkill. Нужно внимательно вводить имя процесса, так как прерывание не того процесса может привести к сбоям:
Если у процесса слишком много экземпляров и дочерних процессов, существует команда killall, которой в качестве аргумента также задается имя процесса.
Для прерывания всех экземпляров mysqld с дочерними процессами воспользуйтесь следующей командой:
Далее можно проверить состояние процесса (запущен он или нет), например:
Команда killall
Еще одна полезная команда для завершения процессов, это команда killall. Эта команда также как и pkill может завершить все процессы имеющие одно имя
А также весьма полезна бывает когда нужно завершить все процессы какого нибудь пользователя.
Заключение
Мы разобрали, как прерывать процессы в Linux и рассмотрели несколько используемых для этого команд. Эти команды следует применять с большой осторожностью, так как неосмотрительное прерывание процесса может привести к системным сбоям или потере важных данных. Для более подробной информации, различных вариантов передаваемых сигналов и других опций можно обратиться к соответствующим man-страницам.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Осваиваем команду Kill в Linux
Независимо от того, какую операционную систему вы используете, каждый из нас сталкивался с ситуацией, когда необходимо закрыть зависшую программу. В Linux (и в Mac) есть команда «kill», которую можно использовать для принудительного завершения работы приложений. В этом руководстве я покажу вам несколько различных способов ее использования.
Команды и сигналы Kill
Когда вы выполняете команду «kill», то фактически вы посылаете системе сигнал, чтобы заставить ее завершить некорректно ведущее себя приложение. Всего вы можете использовать до 60 сигналов, но все, что нужно знать, это SIGTERM (15) и SIGKILL (9).
Вы можете просмотреть все сигналы с помощью команды:
Синтаксис использования «kill»:
где флаг «-9» ссылается на сигнал SIGKILL.
Если вы не знаете точно PID приложения, просто запустите команду:
Она выведет информацию по всем запущенным программам.
Например, чтобы завершить Chrome, я введу команду:
Также обратите внимание, что можно завершать несколько процессов одной командой.
PKill
Команда «pkill» позволяет использовать расширенные шаблоны регулярных выражений и другие критерии соответствия. Вместо использования PID вы теперь можете завершить приложение, введя имя его процесса. Например, для завершения работы Firefox просто введите команду:
Так как оно соответствует шаблону регулярного выражения, вы можете также ввести имя только частично, например:
Killall
Killall также использует имя процесса вместо PID и завершает все экземпляры процесса с этим именем. Например, если вы запустили несколько экземпляров Firefox, вы можете завершить их все с помощью команды:
В Gnome вы можете перезапустить Nautilus с помощью команды:
xkill
Заключение
Если приложение ведет себя неправильно и вызывает зависание системы, очень заманчиво перезагрузить компьютер и начать сеанс заново. С помощью этих команд «kill» вы можете завершить зависшее приложение без опасности для работы системы. Это особенно полезно для серверов, когда вы не хотите, чтобы зависшая программа привела к выключению всего сервера.
Команда kill
Описание команды kill
Синтаксис
PID — это PID (числовой идентификатор) процесса или несколько PID процессов, если требуется послать сигнал сразу нескольким процессам.
По умолчанию команда kill шлет сигнал KILL (он также называется SIGKILL и имеет числовое значение 9 ).
Опции
Примеры использования команды kill
Определить PID процесса
Так как команда kill принимает на вход PID (идентификатор) процесса, то необходимо сначала узнать PID процесса, которому требуется отправить сигнал. Чтобы это сделать, можно использовать команду ps (вместо firefox укажите название процесса):
Вывести список сигналов
Выведем список всех доступных сигналов:
В результате получим список сигналов и их числовые значения:
Отправка сигнала SIGTERM
Пошлем сигнал SIGTERM процессу с PID 3012:
Отправка сигнала KILL (завершение процесса)
Пошлем сигнал KILL процессу с PID 3121, чтобы принудительно завершить процесс:
Или можно использовать числовое значение сигнала:
Отправка сигнала нескольким процессам
Выполним отправку сигнала KILL сразу нескольким процессам. Для этого необходимо перечислить их идентификаторы:
Kill параметры в linux
Команда kill является встроенной командой командной оболочки, предназначенной для отправки системных сигналов определенным процессам. Команда принимает числовые идентификаторы процессов, а также числовые или текстовые идентификаторы сигналов. Чаще всего данная команда используется для принудительного завершения работы определенных процессов.
Базовый синтаксис команды выглядит следующим образом:
$ kill [параметры] идентификатор-процесса
Команда поддерживает ряд параметров командной строки. Наиболее полезным параметром является параметр -s, позволяющий указать системный сигнал, который может быть отправлен заданному процессу, а также параметр -l, позволяющий вывести список поддерживаемых системных сигналов. Вообще, сигналы могут задаваться в нескольких форматах:
По умолчанию команда осуществляет осуществляет отправку сигнала SIGTERM для корректного завершения работы процессов. Отрицательные значения идентификаторов используются для указания групп процессов, которым нужно отправить сигналы. Идентификатор -1 является специализированным идентификатором и используется для отправки сигналов всем запущенным процессам за исключением kill и init. Для получения идентификаторов процессов могут использоваться утилиты ps и top.
Примеры использования
Получение списка поддерживаемых системных сигналов
Для того, чтобы получить список поддерживаемых системных сигналов, достаточно использовать параметр -l рассматриваемой утилиты:
Завершение работы процесса
Для завершения работы процесса достаточно передать его идентификатор команде kill. В данном случае в качестве рассматриваемого процесса будет использоваться предварительно запущенный процесс ping (в первой вкладке эмулятора терминала):
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
…
Для получения его идентификатора достаточно использовать команду ps aux, а также фильтр grep ping (во второй вкладке эмулятора терминала):
$ ps aux | grep ping
…
alex 14371 0.0 0.0 18888 1024 pts/0 S+ 21:08 0:00 ping 127.0.0.1
alex 14381 0.0 0.0 17628 908 pts/1 S+ 21:08 0:00 grep ping
Процесс имеет идентификатор 14371. Для его завершения достаточно использовать команду kill (также во второй вкладке эмулятора терминала):
В результате исполнение процесса будет остановлено (в первой вкладке эмулятора терминала):
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
…
64 bytes from 127.0.0.1: icmp_seq=37 ttl=64 time=0.052 ms
Завершено
Завершение работы зависшего процесса
В случае зависшего процесса или процесса, игнорирующего сигнал SIGTERM, следует использовать сигнал SIGKILL. Для этого следует преобразовать недавно рассмотренную команду:
Исполнение процесса должно завершиться в любом случае.
Приостановка и продолжение исполнения процесса
Для приостановки и продолжения исполнения процессов следует использовать сигналы SIGSTOP и SIGCONT соответственно. Да, как вы наверняка уже догадались, ранее рассмотренная команда:
Превратится в команду для приостановки исполнения процесса:
Или команду для продолжения исполнения процесса:
В этой статье мы рассмотрим несколько самых распространенных способов завершить процесс Linux. Опишем подробно как происходит остановка процесса и как все сделать правильно.
Как происходит завершение процесса?
Управление процессами в операционной системе Linux осуществляется с помощью сигналов. В том числе и завершение любого процесса. Сигналы передает система, но также их может передавать пользователь с помощью специальных команд или даже сочетаний клавиш в терминале. Когда процессу приходит сигнал о необходимости завершиться, он должен выполнить некоторые подготовительные действия.
Необходимо завершить дочерние процессы, удалить временные файлы, сокеты и так далее. Но в зависимости от сложности ситуации процесс может реагировать не на все сигналы. Рассмотрим основные сигналы, которые используются для завершения процесса:
Важно понимать, что нужно дать процессу возможность завершиться корректно. Желательно, чтобы порты и сокеты были освобождены, закрыты и удаленны временные файлы. Поэтому никогда не передавайте сразу SIGKILL. Передавайте сигналы завершения в последовательности, как они перечислены выше.
Для передачи сигналов процессам в Linux используется утилита kill. Ее синтаксис очень прост:
Допустим, у нас выполняется утилита ping. Мы хотим ее завершить с помощью kill. Тогда, сначала мы узнаем ее идентификатор с помощью команды ps:
В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:
И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:
Теперь снова проверяем:
Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.
Как завершить процесс с помощью pkill
Также можно вручную задать тип сигнала:
Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:
Но если вам программа создала несколько процессов, например, браузер chromium или firefox создают отдельный процесс для каждой из вкладок, то эта утилита мало чем поможет. Тут нужен следующий вариант.
Как остановить процесс с помощью killall
killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:
Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:
Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep: