Описание команды kill
kill
Посылает сигнал процессу. Обычно используется для «убийства» процесса (прерывание процесса).
Синтаксис
kill опции PID
PID — это PID (числовой идентификатор) процесса или несколько PID процессов, если требуется послать сигнал сразу нескольким процессам.
По умолчанию команда kill шлет сигнал KILL (он также называется SIGKILL и имеет числовое значение 9).
Опции
-Сигнал или -s Сигнал или —signal Сигнал
Задает сигнал, который будет послан процессу. Сигнал может задаваться числом или названием.
-l или -l Сигнал или —list Сигнал
Вывести список всех сигналов.
Если задано значение Сигнал, то вывод зависит от того, чему равно заданное значение Сигнал:
- числовой номер сигнала — в таком случае будет выведено название сигнала;
- название сигнала — в таком случае будет выведено числовое значение сигнала.
-L или —table
Вывести список сигналов в табличном виде. Выводится числовое значение и название каждого сигнала.
Примеры использования команды kill
Определить PID процесса
Так как команда kill принимает на вход PID (идентификатор) процесса, то необходимо сначала узнать PID процесса, которому требуется отправить сигнал. Чтобы это сделать, можно использовать команду ps (вместо firefox укажите название процесса):
ps -ef | grep firefox
Вывести список сигналов
Выведем список всех доступных сигналов:
kill -L
В результате получим список сигналов и их числовые значения:
$ kill -L
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
Отправка сигнала SIGTERM
Пошлем сигнал SIGTERM процессу с PID 3012:
kill 3012
Отправка сигнала KILL (завершение процесса)
Пошлем сигнал KILL процессу с PID 3121, чтобы принудительно завершить процесс:
kill -KILL 3121
Или можно использовать числовое значение сигнала:
kill -9 3121
Отправка сигнала нескольким процессам
Выполним отправку сигнала KILL сразу нескольким процессам. Для этого необходимо перечислить их идентификаторы:
kill -9 2903 2977 3012
Лайков: +3
Войдите, чтобы ставить лайкимне нравится
Смотрите также
- uptime
- cd
- ls
- pwd
- cp
- Выключение и перезагрузка Linux. Shutdown и Reboot
- Список всех открытых окон в Unity
- Что такое Yay. Особенности. Использование
- Настройка приглашения командной строки в Bash
- Обновление Ubuntu до новой версии
Оригинал:
Mastering the «Kill» Command in Linux
Автор: Damien
Дата публикации: 8 октября 2013 года
Перевод: А. Кривошей
Дата перевода: апрель 2014 г.
Независимо от того, какую операционную систему вы используете, каждый из нас сталкивался с ситуацией, когда необходимо закрыть зависшую программу. В Linux (и в Mac) есть команда «kill», которую можно использовать для принудительного завершения работы приложений. В этом руководстве я покажу вам несколько различных способов ее использования.
Команды и сигналы Kill
Когда вы выполняете команду «kill», то фактически вы посылаете системе сигнал, чтобы заставить ее завершить некорректно ведущее себя приложение. Всего вы можете использовать до 60 сигналов, но все, что нужно знать, это SIGTERM (15) и SIGKILL (9).
Вы можете просмотреть все сигналы с помощью команды:
SIGTERM — этот сигнал запрашивает остановку работы процесса. Он может быть проигнорирован. Процессу дается время на корректное завершение. Если программа завершается корректно, значит она использовала данное время на то, чтобы сохранить свое состояние или результаты работы и освободить ресурсы. Другими словами, ее не заставляли остановиться.
SIGKILL — этот сигнал заставляет процесс прекратить работу немедленно. Программа не может проигнорировать этот сигнал. Несохраненные результаты будут потеряны.
Синтаксис использования «kill»:
$ kill [сигнал или опция] PID
Сигнал по умолчанию (если он не задан) — SIGTERM. Если он не помогает, для принудительного завершения процесса можно использовать следующие варианты:
$ kill SIGKILL PID $ kill -9 PID
где флаг «-9» ссылается на сигнал SIGKILL.
Если вы не знаете точно PID приложения, просто запустите команду:
Она выведет информацию по всем запущенным программам.
Например, чтобы завершить Chrome, я введу команду:
Также обратите внимание, что можно завершать несколько процессов одной командой.
$ kill -9 PID1 PID2 PID 3
PKill
Команда «pkill» позволяет использовать расширенные шаблоны регулярных выражений и другие критерии соответствия. Вместо использования PID вы теперь можете завершить приложение, введя имя его процесса. Например, для завершения работы Firefox просто введите команду:
Так как оно соответствует шаблону регулярного выражения, вы можете также ввести имя только частично, например:
Чтобы предотвратить завершение не тех приложений, которые требовалось, можно использовать команду «pgrep -l [process name]» для вывода списка всех подходящих процессов.
Killall
Killall также использует имя процесса вместо PID и завершает все экземпляры процесса с этим именем. Например, если вы запустили несколько экземпляров Firefox, вы можете завершить их все с помощью команды:
В Gnome вы можете перезапустить Nautilus с помощью команды:
xkill
Xkill — это графический способ завершения приложений. Когда вы введете «xkill» в терминале, курсор примет вид крестика. Все, что вам требуется, кликнуть этим крестиком в окне нужного приложения и оно немедленно завершится. Если вам понравится такой способ, можно настроить для активации xkill горячие клавиши.
Заключение
Если приложение ведет себя неправильно и вызывает зависание системы, очень заманчиво перезагрузить компьютер и начать сеанс заново. С помощью этих команд «kill» вы можете завершить зависшее приложение без опасности для работы системы. Это особенно полезно для серверов, когда вы не хотите, чтобы зависшая программа привела к выключению всего сервера.
Если вам понравилась статья, поделитесь ею с друзьями:
Сигналы — программные прерывания. Они используются для связи между процессами в UNIX и UNIX-подобных операционных систем, таких как Linux, Mac OS.
Сигналы использовались еще с Bell Labs UNIX в 1970 и сегодня официально определено стандартом POSIX. Когда сигнал поступает на процесс, операционная система прерывает нормальный поток выполнения процесса и обеспечивает уведомление.
Не имеет значения, какую операционную систему вы используете, вы несомненно столкнетесь с тем что ваши приложения, блокируются и отказаться работать должным образом. В Unix, Linux, есть команда «kill», которую вы можете использовать, чтобы прекратить процесс немедленно, но и не только это, но об этом немного позже я расскажу. В этой статье «Команда kill в Unix/Linux» я расскажу и покажу на готовых примерах различные команды утилиты kill.
Команды kill и сигналы
Когда вы выполняете команду «kill», вы на самом деле посылает е сигнал к системе и даете указание расторгнуть работу некорректной роботы приложения. Существует в общей сложности 60 сигналов, которые можно использовать, но все, что вы действительно должны знать, SIGTERM (15) и SIGKILL (9).
Вы можете просмотреть все сигналы с помощью команды:
# kill -l
На моей MacOS:
kill -l на macos
На CentOS:
kill -l на centos
На Debian:
kill -l на Debian
Я постараюсь рассказать о всех сигналах, но для самого начала поговорим только о самых важных и часто использующихся.
Основные сигналы
Следующие сигналы являются частью стандарта POSIX. Каждый сигнал макрос, определенный в <signals.h> Файл заголовка системы. Они, как правило, сокращенны, без их SIG- префикса; например SIGHUP часто называют просто как HUP.
SIGTERM – Этот сигнал запрашивает остановку процесса который работает. Этот сигнал может быть проигнорирован.Процессу дается время, чтобы хорошо выключился. Когда программа хорошо выключается, это означает, что ей дано время, чтобы спасти его прогресс и освободить ресурсы. Другими словами, он не «forced» прекращение работы процесса.
SIGKILL – сигнал SIGKILL заставляет процесс прекратить выполнение своей работы немедленно. Программа не может игнорировать этот сигнал. Несохраненный прогресс будет потерян.
Синтаксис для «kill».
Синтаксис команды такой:
# kill [signal or option] PID(s)
или
# kill [-s] [-l] %pid
Сигнал по умолчанию (если он не указан) является SIGTERM. Когда данный сигнал не помогает и не работает, вы можете использовать следующие опции для «kill» чтобы завершить процесс принудительно:
# kill SIGKILL PID
Или
# kill -9 PID
где «-9» — это флаг относится к сигналу SIGKILL.
Если вы не знаете какой нужно использовать PID приложения которого следует избавиться, то запустите команду:
$ ps -aux
А если знаете конкретное приложение (например apache), то можно отсеять ненужное и вывести все процессы по данной службе:
$ ps -aux | grep apache
И это отобразит все запущенные приложения вместе с его PID-ом(ами).
Например, чтобы убить приложение, я выполните следующую команду:
# kill -9 3629
Стоит также отметить, что вы можете использовать несколько процессов одновременно чтобы их можно было » убить»:
# kill -9 PID1 PID2 PID 3
Перезагурзить конфигурационные файлы или перезапуск утилит:
# kill -1 number_of_PID
Особенно полезными сигналы включают HUP, INT, kill, STOP, CONT, и 0.
Варианты таковы:
-s signal_name
Символическое имя сигнала, задающее сигнал для отправки сигнала не по умолчанию.
-l [exit_status]
Если операнд не указан, то показать имена сигналов; В противном случае, написать название сигнала, соответствующего exit_status.
-signal_name
Символическое имя сигнала, задающее сигнал для отправки в TERM по умолчанию.
-signal_number
Неотрицательное десятичное целое, задающее сигнал для отправки в TERM по умолчанию.
Следующие PID-ы, имеют особое значение:
-1 Если суперпользователь, то транслирует сигнал всем процессам; в противном случае вещает на все процессыbelong-
ing для пользователя.
Некоторые из наиболее часто используемых сигналов:
- 1 HUP (hang up) — повесить.
- 2 INT (interrupt) — прерывание.
- 3 QUIT (quit) — выход.
- 6 ABRT (abort) — прерывания.
- 9 KILL (non-catchable, non-ignorable kill)
- 14 ALRM (alarm clock) — будильник.
- 15 TERM (software termination signal) — Программное обеспечение для прекращения сигнала.
PKill
Команда «pkill» позволяет использовать расширенные шаблоны регулярных выражений и других критериев соответствия. Вместо того чтобы использовать PID, теперь вы можете убить приложение, введя имя процесса. Например, чтобы убитьбраузер Firefox , просто запустите команду:
# pkill Firefox
Так как он соответствует шаблону регулярного выражения, вы также можете ввести часть имени процесса, например:
# pkill fire
Чтобы избежать «убийства» неправильных процессов, вы можете сделать «pgrep -l [имя_процесса]» в список подходящих процессов.
Pkill команда имеет гораздо больше вариантов, например если указать опцию «-u», то она позволит вам указать имя пользователя или ID. В этом примере мы посылаем сигнал TERM всем процессам, принадлежащие пользователю ‘nobody’:
# pkill -u nobody
Killall
Killall использует имя процесса, а вместо PID, и он «убивает» все экземпляры процесса с тем же именем. Например, если вы используете несколько экземпляров браузера Firefox, вы можете убить их всех с помощью команды:
# killall firefox
В Gnome, вы можете перезапустить Nautilus с помощью команды:
# killall nautilus
xkill
Xkill является графическим способом «убить» приложение. При вводе «XKill» в терминале, курсор мыши будет немедленно стать «крест». Все, что вам нужно сделать, это нажать «крест» на провинившихся приложение и он убьет приложение мгновенно. Если вы заинтересованы, вы можете добавить сочетание клавиш для включения функции XKill.
Еще сигналы которые используются
SIGABRT
Этот сигнал посылает сигнал процессу, чтобы прервать операцию. ABRT как правило, направлен на сам процесс, когда он вызывает функцию abort() языка программирования С, чтобы сигнализировать аварийное завершение, но он может быть направлен из любого процесса, как и любой другой сигнал.
SIGALRM, SIGVTALRM и SIGPROF
ALRM, VTALRM и / или сигнал PROF отправляется процессу, когда лимит времени, указанный при вызове функции сигнализации (например, setitimer) истекает.
ALRM
Посылается, когда настоящее время или часы с течением времени.
VTALRM
Посылается, когда процессорное время, используемое в процессе истечет.
PROF
Посылается, когда процессорное время, используемое процессом и системы от имени процесса истекает.
SIGBUS
BUS сигнал посылает процессу, когда это приводит к ошибке шины. Условия, которые приводят к данному сигналу, например, неправильное выравнивание доступа к памяти или отсутствие физического адреса.
SIGCHLD
Сигнал CHLD отправляет процессу, когда дочерний процесс завершается, прерывается или возобновляется после прерывания. Один из распространенного использование сигнала — это дать сигнал ОС на очистку ресурсов, которые используются в процессе дочернего процесса после его окончания без явного системного вызова.
SIGCONT
Сигнал CONT инструктирует операционную систему, и дает сигнал перезапустить процесс который ранее был приостановлен в режиме СТОП или сигнала TSTP. Одной из важных особенностей этого сигнала является контроль работы в оболочке Unix.
SIGFPE
Сигнал FPE посылает процессу, когда он выполняет ошибочное, арифметические срабатывания, например, такие как деление на ноль.
SIGHUP
Сигнал HUP посылает процессу, когда его управляющий терминал закрыт. Первоначально он был разработан, чтобы уведомить процесс после последовательного падения линии (HUP ответственный за «зависания»). В современных системах, этот сигнал обычно означает, что контроль псевдо или виртуальным терминалом был закрыт.
SIGILL
ILL сигнал, посылаемый процессу при попытке выполнить вредоносные, неизвестные или привилегированные команды (инструкции).
SIGINT
Сигнал INT посылает процессу от управляющего терминала, когда пользователь желает прервать процесс. Это как правило, инициируется нажатием Control-C, но на некоторых системах, «delete» или «break».
SIGKILL
Сигнал KILL посылает процессу чтобы он немедленно прекратил работу. В отличие от SIGTERM и SIGINT этот сигнал не может быть захвачен или проигнорирован и принимающий процесс не может выполнить какие-либо очистку после получения этого сигнала.
SIGPIPE
Сигнал PIPE посылается процессу, когда он пытается записать в трубе без процесса, подключенного к другому концу.
SIGQUIT
QUIT сигнал посылается процессу от его управляющего терминала, когда пользователь запрашивает процесс выполнения дампа.
SIGSEGV
Сигнал SEGV отправляется в процесс, когда он делает недопустимую ссылку виртуальной памяти или сбой сегментации, то есть когда он выполняет нарушение сегментации.
SIGSTOP
STOP сигнал указывает ОС, чтобы остановить процесс для последующего возобновления.
SIGTERM
Сигнал TERM посылается в процесс чтобы запросить о его прекращении. В отличие от сигнала «kill», он может быть и интерпретируемым или игнорируемым в процессе. Это позволяет процессу выполнять «nice» выполнение для прекращения высвобождения ресурсов и сохранения состояния в случае необходимости. Следует отметить, что SIGINT почти идентичен SIGTERM.
SIGTSTP
Сигнал TSTP посылается в процесс его управляющего терминала и говорит ему, что нужно временно приостановить. Это обычно инициируется пользователем нажатием Control-Z. В отличие от SIGSTOP, этот процесс может зарегистрировать обработчик сигнала или чтобы игнорировать сигнал.
SIGTTIN и SIGTTOU
В TTIN и TTOU сигналы посылаются процессу, когда он пытается прочитать или записать соответственно с (tty) терминала на заднем плане. Как правило, этот сигнал может быть получен только с помощью процессов находящихся под контролем рабочей панели; демоны не имеют управляющие терминалы и никогда не должны получать этот сигнал.
SIGUSR1 и SIGUSR2
Сигналы USR1 и USR2 отправляются процессу и указывают определенные пользователем условия.
SIGPOLL
Сигнал POLL отправляется в процессе, когда происходит асинхронное событие ввода / вывода.
SIGSYS
Сигнал SYS отправляется в процессе, когда он пропускает плохой аргумент для системного вызова.
SIGTRAP
TRAP сигнал посылает процессу когда возникает состояние что отладчик просил быть информированным — Например, когда конкретная функция выполняется или когда меняется определенное значение переменной.
SIGURG
Сигнал URG отправляется процессу, когда socket имеет срочные или вне диапазона данных, доступных для чтения.
SIGXCPU
Сигнал XCPU отправляется в процессе, когда он использует центральный процессор в течение времени превышающего определенное заданное значение, установленным пользователем. Прибытие сигнала XCPU обеспечивает процессу быстро сохранить все промежуточные результаты и завершиться хорошо, прежде чем он завершиться операционной системы с помощью сигнала SIGKILL.
SIGXFSZ
Сигнал XFSZ отправляется в процессе, когда файл вырастает (превышает заданное значение), чем максимально допустимое значение.
SIGRTMIN to SIGRTMAX
Сигналы RTMIN — RTMAX предназначены для использования в пользовательских целей. Они сигналы реального времени.
Разные сигналы
Следующие сигналы не стандартизированы POSIX, но иногда используются на некоторых системах.
SIGEMT
Сигнал ЕМТ отправляется в процессе, когда происходит прерывание эмулятора.
SIGINFO
Сигнал INFO отправляется в процессе, когда запрос статуса получен от управляющего терминала.
SIGPWR
Сигнал PWR отправляется в процессе, когда система испытывает сбой питания.
SIGLOST
LOST сигнал посылается к процессу, когда «file lock» теряется.
SIGWINCH
Сигнал WINCH отправляется в процессе, когда его управляющий терминал меняет свой размер.
Отправка сигналов с клавиатуры
Сигналы могут быть отправлены с клавиатуры. Несколько стандартных значений по умолчанию перечислены ниже. По умолчанию сочетания клавиш для отправки сигналов прерывания может быть определен с помощью команды stty.
CTRL-C
Отправить SIGINT (прерывание). По умолчанию это вызывает процесс прекращается.
CTRL-Z
Отправить SIGTSTP (Suspend). По умолчанию это вызывает процесс приостановить все операции.
CTRL-
Отправить SIGQUIT (Quit). По умолчанию это вызывает процесс прекратить немедленно и сбросить ядро.
CTRL-T
Отправить SIGINFO (INFO). По умолчанию это заставляет операционную систему отображать информацию о команде. Не поддерживается на всех системах.
вывод
Когда приложения ведут себя неправильно и вызвают к зависанию системы, это очень заманчиво, чтобы перезагрузить компьютер и начать сеанс снова и снова. С помощью этих команд «kill», вы сможете лучше управлять плохим поведением приложений которые вызывают или могут вызвать крах системы. На этом, я завершаю данную тему «Команда kill в Unix/Linux».
Linux — отличная и продвинутая операционная система, но она не идеальна. Время от времени некоторые приложения могут начать работать нестабильно, перестать отвечать на запросы или начать потреблять много системных ресурсов. Не отвечающие приложения не могут быть перезапущены, потому что исходный процесс приложения никогда не завершается полностью. Единственное решение — либо перезапустить систему, либо убить процесс приложения.
Есть несколько утилит, которые позволяют завершать ошибочные процессы, kill
наиболее часто используемые.
Команда kill
kill
— это оболочка, встроенная в большинство оболочек, таких как Bash и Zsh. Поведение команд немного отличается между оболочками и автономным исполняемым файлом /bin/kill
.
Используйте команду type
чтобы отобразить все места в вашей системе, содержащие kill
:
type -a kill
kill is a shell builtin
kill is /bin/kill
Приведенный выше вывод говорит о том, что встроенная оболочка имеет приоритет над автономным исполняемым файлом и используется всякий раз, когда вы вводите kill
. Если вы хотите использовать двоичный файл, введите полный путь к файлу /bin/kill
. В этой статье мы будем использовать встроенный Bash.
Синтаксис команды kill
имеет следующий вид:
Команда kill
отправляет сигнал указанным процессам или группам процессов, заставляя их действовать в соответствии с сигналом. Если сигнал не указан, по умолчанию используется значение -15
(-TERM).
Наиболее часто используемые сигналы:
1
(HUP
) — перезагрузить процесс.9
(KILL
) — убить процесс.15
(TERM
) — изящно остановить процесс.
Чтобы получить список всех доступных сигналов, вызовите команду с параметром -l
:
kill -l
Сигналы можно указать тремя разными способами:
- Использование числа (например,
-1
или-s 1
). - Использование префикса «SIG» (например,
-SIGHUP
или-s SIGHUP
). - Без префикса «SIG» (например,
-HUP
или-s HUP
).
Следующие команды эквивалентны друг другу:
kill -1 PID_NUMBER
kill -SIGHUP PID_NUMBER
kill -HUP PID_NUMBER
PID, предоставленные команде kill
могут быть одним из следующих:
- Если
PID
больше нуля, сигнал отправляется процессу с идентификатором, равнымPID
. - Если
PID
равен нулю, сигнал отправляется всем процессам в текущей группе процессов. Другими словами, сигнал отправляется всем процессам, принадлежащим GID оболочки, вызвавшей командуkill
. Используйте командуps -efj
для просмотра идентификаторов групп процессов (GID). - Если
PID
равен-1
, сигнал отправляется всем процессам с тем же UID, что и пользователь, вызывающий команду. Если вызывающий пользователь является пользователем root, сигнал отправляется всем процессам, кроме init и самого процессаkill
. - Если
PID
меньше-1
, сигнал отправляется всем процессам в группе процессов eq с GID, равным абсолютному значениюPID
.
Обычные пользователи могут отправлять сигналы своим собственным процессам, но не тем, которые принадлежат другим пользователям, в то время как пользователь root может отправлять сигналы процессам других пользователей.
Завершение процессов с помощью команды kill
Чтобы завершить или убить процесс с помощью команды kill
, сначала вам нужно найти идентификационный номер процесса (PID). Вы можете сделать это с помощью различных команд, таких как top
, ps
, pidof
и pgrep
.
Допустим, браузер Firefox перестал отвечать, и вам нужно остановить процесс Firefox. Чтобы найти идентификаторы PID браузера, используйте команду pidof
:
pidof firefox
Команда распечатает идентификаторы всех процессов Firefox:
6263 6199 6142 6076
Как только вы узнаете номера процессов, вы можете убить их всех, отправив сигнал TERM
:
kill -9 6263 6199 6142 6076
Вместо того, чтобы искать PID и затем убивать процессы, вы можете объединить приведенные выше команды в одну:
kill -9 $(pidof firefox)
Перезагрузка процессов с помощью команды kill
Другой распространенный вариант использования kill
— это отправить сигнал HUP
, который сообщает процессам о необходимости перезагрузки его настроек.
Например, чтобы перезагрузить Nginx , вам необходимо отправить сигнал главному процессу. Идентификатор основного процесса Nginx можно найти в файле nginx.pid
, который обычно находится в каталоге /var/run
.
Используйте команду cat
чтобы найти главный PID:
cat /var/run/nginx.pid
30251
Как только вы найдете главный PID, перезагрузите настройки Nginx, набрав:
sudo kill -1 30251
Приведенная выше команда должна запускаться от имени пользователя root или пользователя с привилегиями sudo .
Выводы
Команда kill
используется для отправки сигнала процессам. Наиболее часто используемый сигнал — SIGKILL
или -9
, который завершает данные процессы.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.