Убиваем процессы в Linux - команды ps, kill и killall. Linux статьи
Написать статью
Войдите, чтобы писать статьи

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

36

Не смотря на свою стабильность, некоторые приложения в Linux иногда виснут. Иногда приложения перестают отзываться или просто работают так медленно, что корректно закрыть их не получается. Один из способов «убить», запущенное приложение в Linux, это использование таких команд, как kill или killall. Рассмотрим, как использовать эти команды, находить PID процесса и посылать сигнал SIGKILL.

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

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

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

ps axu

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

ps axu | grep gcalctool

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

$ ps axu | grep gcalctool
yuriy 25587 0.0 0.0 10636 884 pts/2 S+ 10:20 0:00 grep --color=auto gcalctool

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

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

yuriy@yuriy-NIX:~$ ps axu | grep gcalctool
yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool
yuriy 25624 0.0 0.0 10640 884 pts/2 S+ 10:21 0:00 grep --color=auto gcalctool

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

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

$ pidof gcalctool
25609

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

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

kill 25609

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

kill -9 25609

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

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

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

killall gcalctool

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

killall -s 9 gcalctool

Заключение

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

sudo kill 123

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

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

man ps
man grep
man pidof
man kill
man killall
Лайков: +3
войдите, чтобы ставить лайки
36
  • Опубликовано: 12.09.2012

Комментарии

bibilkoff
Активный пользователь
Активный
13.09.2012
09:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
спасибо, интересная статья.
USUB
Активный пользователь
Активный
03.01.2013
22:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
у меня в xfce есть диспетчер xfce с пидами и эрсэсэсами. я его на панель в быстрый запуск вывел. зависла прога - щелк по диспетчеру , на процесс (он там буро-красным
горит) правой кнопкой - хошь завершить, хошь убить. Блямс!!!! и готово.
к чему такие сложности.....
Oleshka
06.01.2013
17:28
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+1
войдите, чтобы ставить лайки
зато в любом unix-подобном дистрибутиве будет работать такой способ
Voland
Активный пользователь
Активный
07.01.2013
09:28
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+1
войдите, чтобы ставить лайки
А на сервер тоже DE ставить? Работу в командной строке в Unix-подобных ОС знать необходимо.
uselessgnome
20.09.2013
10:11
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+1
войдите, чтобы ставить лайки
А ты попробуй завершить процесс Xorg в своем хваленом диспетчере,когда у тебя графический интерфейс Xсервера повиснет, потом расскажешь (:
VadimAndy
Активный пользователь
Активный
22.09.2013
21:48
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийuselessgnomeРодительский комментарий
+1
войдите, чтобы ставить лайки
Извиняй, конечно, но если все корректно поставлено, то и Xorg заврешать не придется. Кроме того, к команде предстовляется справка. И этим все сказано.
Alex
23.10.2013
20:33
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийuselessgnomeРодительский комментарий
+1
войдите, чтобы ставить лайки
ctrl+alt+backspace ни кто еще не отменял)
VadimAndy
Активный пользователь
Активный
02.06.2014
15:19
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийAlexРодительский комментарий
+1
войдите, чтобы ставить лайки
Отменял, если заранее не настроено.
Hao
Активный пользователь
Активный
24.10.2013
18:30
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+1
войдите, чтобы ставить лайки
Во-первых, большинство графических диспетчеров задач (системных мониторов, менеджеров процессов или как там их ещё называют...) сами кушают некоторое количество ресурсов, а в ситуации, когда какой-либо процесс "завис", этот "зависший" процесс будет тормозить всё остальное, в том числе и сам диспетчер задач. По сравнению с ним, простые консольные команды практически невесомы, и должны работать почти в любой ситуации.
Во-вторых, они дают возможность завершать процессы даже если не загружен никакой графический интерфейс. Поэтому умение работать в консоли всегда полезно.
В-третьих, знание подобных консольных команд необходимо для автоматизации и настройки системы, и в некоторых случаях их использование гораздо более удобней, чем нежили использование громоздких графических утилит. Например, если вам нужно убить какой-нибудь ПЛОХОЙ_ПРОЦЕСС, то Вы просто можете ввести команду: "killall ПЛОХОЙ_ПРОЦЕСС", а если Вам приходится убивать его часто, то Вы можете создать какой-нибудь пункт запуска с этой командой, или назначить её под какую-нибудь "горячую клавишу". Таким образом, Вы сможете убить неугодный Вам процесс всего в один клик, или одно нажатие клавиши... Согласитесь, ведь это гораздо удобнее, чем каждый раз запускать диспетчер, искать в нём неугодный процесс, завершать его, а после завершать сам диспетчер...

P.S. Статья очень хорошая, автору спасибо!
Александр
17.02.2014
14:23
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+1
войдите, чтобы ставить лайки
А если система намертво зависла и диспетчер не возможно будет включить, тогда что делать будете?

Наверное нажмете Ctrl+Alt+F1 и будете делать как в статье написано.
lol
22.05.2015
10:49
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+2
войдите, чтобы ставить лайки
Латентный виндузятник
Хакер
24.07.2016
08:47
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
+2
войдите, чтобы ставить лайки
Да потомучто есть ленивые людир а есть нормальные.Которым нравится inux
[аноним]
21.02.2023
11:11
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUSUBРодительский комментарий
0
войдите, чтобы ставить лайки
Нечем щёлкать - мышь зависла
Михаил
20.09.2013
08:03
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
5 баллов!
Лаконично, чётко, доступно!
И без снобизма.
Уважуха, чел!
Фёдор
13.10.2013
13:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийМихаилРодительский комментарий
+1
войдите, чтобы ставить лайки
Согласен, понравилась конкретика без мусора.
А диспетчер виснет вместе с убойным процессом. Толку от него мало, его даже запустить проблемно в таком случае.
VadimAndy
Активный пользователь
Активный
02.06.2014
16:31
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Не понятно чем не угодил top/Htop? Уж что-что а pid он точно укажет.
tostus
11.10.2014
18:53
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVadimAndyРодительский комментарий
+1
войдите, чтобы ставить лайки
Ммм.. безусловно, пид они покажут, и там даже SIG нужный можно отправить, но например top в не интерактивном режиме использовать уже не так удобно. Если Вам нужно определять пид где-нибудь в подстановке $(), или Вы пишите скрипт инициализации демона или еще чего, какой парсер там, ps позволяет Вам форматировать вывод и получать нужную строчку с пидом в нужном формате. Это всего лишь пример.

Не забываем и unix-way, ps в него отлично вписывается. Более того, в привычной жизни сисадмина ps aux | grep ... , а после kill использовать куда удобней, просто потому что каждый раз, как я захожу в top или htop мне постоянно приходится вспоминать, какую же клавишу жмакнуть, что бы отфильтровать вывод.
VadimAndy
Активный пользователь
Активный
05.04.2018
16:26
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийtostusРодительский комментарий
+1
войдите, чтобы ставить лайки
осваиваем функционал htop. это конечно не ps, но если приспособиться игрушка вполне дельная
embers
05.12.2014
20:56
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
скажите, как можно осуществить одной командой (возможно через конвеер) поиск pid по названию процесса и его останов или завершение ? спасибо
Den
30.11.2017
17:02
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийembersРодительский комментарий
+1
войдите, чтобы ставить лайки
kill -19 $(pidof firefox) - остановить
kill -18 $(pidof firefox) - восcтановить
kill -9 $(pidof firefox) - убить
Ден
06.12.2014
13:30
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Спасибо. очень помогло. открывал man ничего не понял. прочитал эту статью и все стало на свои места. Автору еще раз огромное спасибо.
супер чел
12.12.2014
14:00
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Друзья а подскажите что делать если процес не запускаеться из-за того что уже запущен
но PID его постоянно меняеться как убить такой процес?
заранее спасибо
чел супер
20.02.2015
20:44
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийсупер челРодительский комментарий
+1
войдите, чтобы ставить лайки
pkill -9 имя_процесса
tester
13.01.2015
14:13
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
2супер_чел

killall %имя_процесса%
Александр
16.01.2015
20:51
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Способы решения очень хорошо описаны. Плюсую.
usesa
05.03.2015
19:03
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Спасибо, помогли разобраться!
Arthur
20.03.2015
19:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Все правильно. Только одно замечания Kill -9 убивает процесс напрочь (не дожидаясь корректного завершения), и пользоваться надо осторожно. Например, если запущен сервер базы данных такая команда не даст правильно сохранить процесс - база будет РАЗРУШЕНА !!!!!!!!!!!!!!!!
Aleks
04.04.2015
01:21
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
kill -9 pid крутая вещь, не знал. спасибо.
Денис
09.06.2016
15:28
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
А если так завис что ни одна кнопка не работает! только шнур из розетки! как быть с этим?
владимир
23.07.2017
15:36
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
если завис наглухо, тогда alt+print+b
Dikhtyaruk Anton
05.10.2017
08:09
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Маленькая история о том, как я убил демона в себе:
ps -aux | grep 'php -f daemon_within_me.php' | awk '{print $2}' | xargs kill
вася
04.04.2018
18:40
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийDikhtyaruk AntonРодительский комментарий
+1
войдите, чтобы ставить лайки
то что надо!
Тимур
20.11.2017
12:31
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
А зачем людей обманывать ? Где поиск зависшего процесса ?
Александр
27.02.2018
06:09
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Отличная статья. Спасибо.
Maxim
08.06.2018
01:22
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Странно но kill -9 <номер> - не убивает один процесс.
ps показывет его как зомби, команда kill проходит без вопросов, только процесс всё равно остаётся в системе.
Nikolay
25.08.2022
21:54
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
К сожалению, у меня в системе так плотно зависла samba, что только reboot тут может помочь. Все команды для "убийства" процессов, естественно, пробовал использовать.

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила