Как убить процесс в Linux. Убить процесс с помощью команды killall в Linux

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

В этой статье мы рассмотрим несколько самых распространенных способов завершить процесс Linux. Опишем подробно как происходит остановка процесса и как все сделать правильно.

Управление процессами в операционной системе Linux осуществляется с помощью сигналов. В том числе и завершение любого процесса. Сигналы передает система, но также их может передавать пользователь с помощью специальных команд или даже сочетаний клавиш в терминале. Когда процессу приходит сигнал о необходимости завершиться, он должен выполнить некоторые подготовительные действия.

Необходимо завершить дочерние процессы, удалить временные файлы, сокеты и так далее. Но в зависимости от сложности ситуации процесс может реагировать не на все сигналы. Рассмотрим основные сигналы, которые используются для завершения процесса:

  • SIGINT - самый безобидный сигнал завершения, означает Interrupt. Он отправляется процессу, запущенному из терминала с помощью сочетания клавиш Ctrl+C. Процесс правильно завершает все свои действия и возвращает управление;
  • SIGQUIT - это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/;
  • SIGHUP - сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом;
  • SIGTERM - немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы;
  • SIGKILL - тоже немедленно завершает процесс, но, в отличие от предыдущего варианта, он не передается самому процессу, а обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными.

Важно понимать, что нужно дать процессу возможность завершиться корректно. Желательно, чтобы порты и сокеты были освобождены, закрыты и удаленны временные файлы. Поэтому никогда не передавайте сразу SIGKILL. Передавайте сигналы завершения в последовательности, как они перечислены выше.

Сначала Ctrl+C , если это возможно, затем SIGTERM - он хоть и завершает процесс, но делает эту культурно, и только в крайнем случае SIGKILL. А теперь рассмотрим как убить процесс по pid Linux на практике. Если вы всегда используете SIGKILL, тогда на ум приходит такая картинка:

Как убить процесс Linux?

Для передачи сигналов процессам в Linux используется утилита kill. Ее синтаксис очень прост:

$ kill -сигнал pid_процесса

Сигнал представляет собой один из выше перечисленных сигналов для завершения процесса. По умолчанию, если этот параметр не указан, используется сигнал SIGTERM, что является очень правильно. Также нам нужно указать какой процесс нужно завершить. Для этого используется уникальный идентификатор процесса - PID.

Допустим, у нас выполняется утилита ping. Мы хотим ее завершить с помощью kill. Тогда, сначала мы узнаем ее идентификатор с помощью команды ps:

ps aux | grep ping

В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:

kill -TERM 20446

И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:

kill -KILL 20446

Теперь снова проверяем:

Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.

Как завершить процесс с помощью pkill

Утилита pkill - это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:

Также можно вручную задать тип сигнала:

pkill -TERM ping

Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:

Но если вам программа создала несколько процессов, например, браузер chromium или firefox создают отдельный процесс для каждой из вкладок, то эта утилита мало чем поможет. Тут нужен следующий вариант.

Как остановить процесс с помощью killall

killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:

Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:

Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:

Выводы

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

Сегодня мы поговорим о том, как в Ubuntu Linux справляться с процессами которые зависли и вы не можете их завершить. Они пожирают системные ресурсы загружая систему, отжирая приличную часть оперативной памяти, чем создают такие проблемы как торможение в работе компьютера либо частичному зависанию системы на краткие отрезки времени. Ситуации бывают разные, бывает зависнет рабочий стол, бывает приложение зависнет, иногда и окружение рабочего стола зависает, именно с данных ситуаций мы будем искать выход как обойтись без перезагрузки системы и не выключать компьютер кнопкой на системном блоке компьютера так как это не есть хорошим решением.

Иногда возникает потребность убить процесс в Ubuntu Linux, как это правильно выполнить и не навредить, обсудим как консольные варианты решения так и через графический интерфейс.

Сегодня мы поговорим о том, как в Ubuntu Linux справляться с процессами которые зависли и вы не можете их завершить. Они пожирают системные ресурсы загружая систему, отжирая приличную часть оперативной памяти, чем создают такие проблемы как торможение в работе компьютера либо частичному зависанию системы на краткие отрезки времени. Ситуации бывают разные, бывает зависнет рабочий стол, бывает приложение зависнет, иногда и окружение рабочего стола зависает, именно с данных ситуаций мы будем искать выход, как обойтись без перезагрузки системы и не выключать компьютер кнопкой на системном блоке компьютера так как это не есть хорошим решением.

При работе с Ubuntu Linux у вас вероятно уже возникали вопросы:

Как определить PID чтобы в последующем убить процесс / приложение

Если вы не хотите запускать команду top или же другой более мощный ее аналог htop , далее утруждать себя поисками айди того или иного айди процесса, есть более простой выход / решение, чтобы найти PID процесса можно использовать команду "pidof " или "PS ".

Допустим нам нужно узнать айди процесса приложения Google Chrome, что мы делаем в данной ситуации, откройте терминал Ctrl + Alt + T и выполняем в терминале команду:

Pidof chrome

получаем вывод:

9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

почти готово, PID мы определили, о том как убить процесс, читаем ниже.

Как убить процесс в Linux по PID

Мы определили какой PID в приложения которое мы хотим убить, с описанного выше, вы видите, что у меня запущено сейчас в браузере много вкладок и плюс отдельные процессы браузера, в итоге 16 айди, чтобы убить их все, выполняем команду:

Sudo kill 9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

так же вы можете в системе посмотреть все активные процессы выполнив команду:

Sudo ps axu

да, вот так просто. Вместо Chrome может быть любое другое приложение, skype или еще какое другое.

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

Ps -A | grep -i name-app

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

Ps -A | grep -i skype

получаем следующий результат:

9257 ? 00:00:57 skype

все что нам нужно как на ладони, есть айди так же видим сколько времени данный процесс уже работает.

Как использовать команду Kill в Linux

О том как получить идентификатор PID я описал уже выше, далее нам остается лишь использовать этот PID совместно с kill чем мы убьем неугодный нам процесс, смотрим детали немного ниже.

Айди получили и можем теперь убить приложение:

Sudo kill 9257

вот и все, приложение убито.

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

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

Sudo killall skype

так же вариант:

Sudo killall -s 9 skype

в тот же миг приложение прекращает свою работу, вот так легко можно убить неугодные вам процессы.

Команда смерти, что не стоит выполнять в терминале

Я ранее писал материал о вредных советах, какие команды не стоит выполнять в терминале чтобы не убить систему, но список не совершенен и его можно дополнить еще многими командами, одну с которых вы найдете ниже.

Приведу пример команды смерти:

Sudo kill -9 -1

это команда убьет все запущенные на данный момент процессы. Не советовал бы ее выполнять так как последствия могут быть непредсказуемые и вероятней всего придется перезапускать систему без графического интерфейса. На случай вдруг откажет графический интерфейс, тогда открываем терминал с помощью команд CTRL+ALT+F1 , каждое новое окно открывается по той же аналогии просто меняется F1 уже на F2 и так далее.

Получить справку по командам которые использовались выше, вы так же можете через терминал выполнив команды:

Man ps man grep man pidof man kill man killall

На этом наш краткий материал окончен, если вам что-то не понятно, спрашивайте в комментариях к материалу ниже.

В основном, мы смотрим PID, чтобы убить невосприимчивую программу, и она похожа на диспетчер задач Windows.

Linux GUI также предлагает ту же функцию, но CLI — эффективный способ выполнения операции kill.

Что такое идентификатор процесса PID?

PID обозначает идентификационный номер процесса, который обычно используется большинством ядер операционной системы, таких как Linux, Unix, macOS и Windows.

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

Процесс — это исполняемый экземпляр программы.

Каждый раз, идентификатор процесса будет получать изменения ко всем процессам, кроме init, поскольку init всегда является первым процессом в системе и является предком всех других процессов. Это PID — 1.

Максимальное значение PID по умолчанию — 32 768.

# cat/proc/sys/kernel/pid_max

В 32-битных системах 32768 является максимальным значением, но мы можем установить любое значение до 2 ^ 22 (приблизительно 4 миллиона) в 64-битных системах.

Вы можете спросить, почему нам нужно такое количество PID? потому что мы не можем повторно использовать PID сразу. Также во избежание возможных ошибок.

PID для запущенных процессов в системе можно найти с помощью следующих девяти методов, таких как команда pidof, команда pgrep, команда ps, команда pstree, команда ss, команда netstat, команда lsof, команда fuser и команда systemctl.

  • pidof: pidof — найти идентификатор процесса запущенной программы.
  • pgrep: pgre — поиск или обработка сигналов на основе имени и других атрибутов.
  • ps: ps — сообщает моментальный снимок текущих процессов.
  • pstree: pstree — отображает дерево процессов.
  • ss: ss используется для вывода статистики сокетов.
  • netstat: netstat отображает список открытых сокетов.
  • lsof: lsof — список открытых файлов.
  • fuser: идентификаторы процессов в списке терминов всех процессов, которые открывают один или несколько файлов
  • systemctl: systemctl — Управление системой systemd и менеджером сервисов

В этом уроке мы рассмотрим идентификатор процесса Apache для проверки.

Метод-1: Использование команды pidof

pidof используется для поиска идентификатора процесса запущенной программы.

Он выводит эти идентификаторы на стандартный вывод.

Чтобы продемонстрировать это, мы узнаем идентификатор процесса Apache2 из системы Debian 9.

# pidof apache2 3754 2594 2365 2364 2363 2362 2361

Из вышесказанного вы можете столкнуться с трудностями идентификации идентификатора процесса, поскольку он показывает все PID (включая родительский и дочерний) с именем процесса.

Следовательно, нам нужно выяснить родительский PID (PPID), который мы ищем.

Это может быть первый номер. В моем случае это 3754, и он показан в порядке убывания.

Способ-2: Использование команды pgrep

pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout.

# pgrep apache2 2361 2362 2363 2364 2365 2594 3754

Это также похоже на вышеприведенный вывод, но этот приводит к сокращению результатов в порядке возрастания, что ясно говорит о том, что родительский PID является последним.

В моем случае это 3754.

Примечание. Если у вас есть несколько идентификаторов процесса, вы можете столкнуться с проблемой идентификации идентификатора родительского процесса при использовании команды pidof & pgrep.

Метод-3: Использование команды pstree

pstree показывает запущенные процессы как дерево.

Дерево коренится либо в pid, либо в init, если pid опущен.

Если имя пользователя указано в команде pstree, тогда отображается весь процесс, принадлежащий соответствующему пользователю.

pstree визуально объединяет идентичные ветви, помещая их в квадратные скобки и префикс с количеством повторений.

# pstree -p | grep "apache2" |-apache2(3754) -+-apache2(2361) | |-apache2(2362) | |-apache2(2363) | |-apache2(2364) | |-apache2(2365) | `-apache2(2594)

Чтобы получить только один родительский процесс, используйте следующий формат.

# pstree -p | grep "apache2" | head -1 |-apache2(3754) -+-apache2(2361)

Команда pstree очень простая, потому что она отдельно разделяет родительский и дочерний процессы

Метод-4: Использование команды ps

ps отображает информацию о выборе активных процессов.

Он отображает идентификатор процесса (pid = PID), терминал, связанный с процессом (tname = TTY), кумулятивное время процессора в формате hh: mm: ss (time = TIME) и исполняемое имя (ucmd = ЦМД).

По умолчанию выходной файл не сортируется.

# ps aux | grep "apache2" www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

Из вышеприведенного вывода мы можем легко идентифицировать идентификатор родительского процесса (PPID) на основе даты начала процесса.

В моем случае процесс apache2 был запущен @ Dec11, который является родителем, а другие — дочерними. PID apache2 равен 3754.

Метод-5: Использование команды ss

ss используется для вывода статистики сокетов.

Он позволяет отображать информацию, аналогичную netstat.

Он может отображать больше информации о TCP и состоянии, нежели другие инструменты.

Он может отображать статистику для всех типов сокетов, таких как PACKET, TCP, UDP, DCCP, RAW, домен Unix и т. д.

# ss -tnlp | grep apache2 LISTEN 0 128:::80:::* users:(("apache2",pid=3319,fd=4),("apache2",pid=3318,fd=4),("apache2",pid=3317 ,fd=4))

Метод-6: Использование команды netstat

netstat — вывод сетевых подключений, таблиц маршрутизации, статистики интерфейсов, соединений маскарадинга и многоадресной рассылки.

По умолчанию netstat отображает список открытых сокетов.

Если вы не укажете каких-либо семейств адресов, будут выведены активные сокеты всех сконфигурированных семейств адресов.

Эта программа устарела. Замена для netstat — ss.

# netstat -tnlp | grep apache2 tcp6 0 0:::80:::* LISTEN 3317/apache2

Метод-7: использование команды lsof

lsof — список открытых файлов.

Команда lsof Linux выводит информацию о файлах, открытых для процессов, запущенных в системе.

# lsof -i -P | grep apache2 apache2 3317 root 4u IPv6 40518 0t0 TCP *:80 (LISTEN) apache2 3318 www-data 4u IPv6 40518 0t0 TCP *:80 (LISTEN) apache2 3319 www-data 4u IPv6 40518 0t0 TCP *:80 (LISTEN)

Метод-8: Использование команды fuser

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

# fuser -v 80/tcp USER PID ACCESS COMMAND 80/tcp: root 3317 F.... apache2 www-data 3318 F.... apache2 www-data 3319 F.... apache2

Метод-9: Использование команды systemctl

systemctl — Управление системой systemd и менеджером сервисов.

Это замена старого системного управления SysV и большинство современных операционных систем Linux были адаптированы systemd.

# systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-09-25 10:03:28 IST; 3s ago Process: 3294 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 3317 (apache2) Tasks: 55 (limit: 4915) Memory: 7.9M CPU: 71ms CGroup: /system.slice/apache2.service ├─3317 /usr/sbin/apache2 -k start ├─3318 /usr/sbin/apache2 -k start └─3319 /usr/sbin/apache2 -k start Sep 25 10:03:28 ubuntu systemd: Starting The Apache HTTP Server... Sep 25 10:03:28 ubuntu systemd: Started The Apache HTTP Server.

Операционная система UNIX Робачевский Андрей М.

Идентификатор процесса Process ID (PID)

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

Данный текст является ознакомительным фрагментом. Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА Начальное обращение к файлу производится по его составному имени (имени пути поиска), как в командах open, chdir (изменить каталог) или link. Поскольку внутри системы ядро работает с индексами, а не с

Из книги Редкая профессия автора Зуев Евгений

Что такое идентификатор? Помимо неоднозначностей в синтаксисе быстро обнаружились другие неприятности. На примерах их показать сложнее, так что придется рассказывать словами.Синтаксис языка Си++ неудобен еще и в другом отношении. Если говорить коротко, то прямое

Из книги Программирование автора Козлова Ирина Сергеевна

11. Идентификатор. Ключевые слова Идентификатором называется последовательность цифр, букв и специальных символов. При этом первой стоит буква или специальный символ. Для получения идентификаторов можно использовать строчные или прописные буквы латинского алфавита.

Из книги 200 лучших программ для Интернета. Популярный самоучитель автора Краинский И

Process Guardian ХР Производитель: T.A.S. Independent Programming (http://www.tas-independent-programming.com).Статус: бесплатная.Ссылка для скачивания: http://www.tas-independent-programming.com/cgi-bin/countdown.pl?Guardian.exe.Размер: 2,4 Мбайт.Главное предназначение этой утилиты – управлять запущенными на компьютере процессами.После

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Идентификатор открытого файла В состав класса CFile входит элемент данных m_hFile типа UINT. В нем хранится идентификатор открытого файла. Если вы создали объект класса CFile, но еще не открыли никакого файла, то в m_hFile записана константа hFileNull.Обычно нет необходимости

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Идентификатор транзакций Другая часть стратегии тайм-аутов и повторных передач заключается в использовании идентификаторов транзакций (transaction ID или XID) для распознавания запросов клиента и ответов сервера. Когда клиент вызывает функцию RPC, библиотека присваивает этому

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

16.7 Временная метка и идентификатор сообщения При получении почты интересно узнать время ее отправления и получения. SMTP добавляет эту информацию к пересылаемому сообщению. Кроме того, этот протокол отслеживает все хосты, которые передавали почтовое сообщение, и время

Из книги Adobe Audition 3 учебник автора Автор неизвестен

Dynamic EQ (process) Эффект Dynamic EQ варьирует количество фильтрации со временем. Например, в первой половине волны вы можете поднять высокие частоты, а во второй - изменить ширину затрагиваемой полосы частот. Окно Dynamic EQ имеет три вкладки: Gain, Frequency, и Q (bandwidth). 1. Frequency graph (график

Из книги Справочник по PHP автора

Pan/Expander (process) Эффект Pan/Expand позволяет переместить центральный канал (моно составляющую) из стерео сигнала, а также расширить или сузить стерео разделение левого и правого каналов.Центральный канал панорамируется используя центральный и окружающие каналы стерео записи,

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Stretch (process) Эффект Stretch позволяет изменять высоту тона (питч) звукового сигнала, темп или то и другое. Например, вы можете использовать этот эффект, чтобы увеличить высоту тона фонограммы без изменения ее длительности, или же наоборот изменить длительность не изменяя

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Идентификатор сессии Итак, идентификатор сессии является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Один SID - одно хранилище. Нет SID, нет и хранилища, и наоборот.Так как же соотносится идентификатор и имя

Из книги Операционная система UNIX автора Робачевский Андрей М.

10.2.1. Идентификатор процесса и происхождение Два из наиболее фундаментальных атрибутов - это идентификатор процесса (process ID), или pid, а также идентификатор его родительского процесса. Идентификатор pid - это положительное целое число, которое уникально идентифицирует

Из книги автора

10.2.3. Идентификатор uid файловой системы В очень специальных случаях программе может понадобиться сохранять свои права root для всего, кроме доступа к файловой системе, при котором она использует пользовательский uid. Изначально использовавшийся в Linux NFS-сервер пространства

Из книги автора

Идентификатор домена При создании в базе данных домена вы должны задать идентификатор домена, который является глобально уникальным в базе данных. Разработчики часто используют префикс или суффикс в идентификаторах доменов для улучшения документирования. Например:CREATE

Из книги автора

Из книги автора

Идентификатор родительского процесса Parent Process ID (PPID) Идентификатор процесса, породившего данный