Принудительное завершение процесса linux

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

How to Kill a Process in Linux

В этой статье мы покажем вам , как использовать kill , killall и pkill команды для завершения процесса в Linux.

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

Ну, это случилось со всеми нами в какой-то момент, не так ли? Решение состоит в том, чтобы прекратить или убить процесс приложения. Но как?

К счастью, в Linux есть несколько утилит, которые позволяют убивать ошибочные процессы.

Основное различие между этими инструментами заключается в том, что они kill завершают процессы на основе идентификатора процесса (PID), killall а pkill команды и завершают запущенные процессы на основе их имен и других атрибутов.

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

Сигналы убийства системы

kill , killall И pkill послать данный сигнал к определенным процессам или группам процессов. Когда сигнал не указан, каждый инструмент отправляет 15 ( TERM ).

Наиболее часто используемые сигналы:

  • 1 (-HUP): перезагрузить процесс.
  • 9 (-KILL): убить процесс.
  • 15 (-TERM): изящно остановить процесс.

Сигналы могут быть указаны тремя различными способами:

  • используя число (например, -1)
  • с префиксом «SIG» (например, -SIGHUP)
  • без префикса «SIG» (например, -HUP).

Используйте -l опцию для перечисления всех доступных сигналов:

Описанные ниже шаги будут работать на всех дистрибутивах Linux.

Завершение процессов с помощью kill команды

Чтобы прервать процесс kill сначала командой, вам нужно найти PID процесса. Вы можете сделать это , используя различные команды , такие как top , ps , pidof , и pgrep .

Допустим, браузер Firefox перестал отвечать на запросы, и вам нужно убить процесс браузера. Чтобы найти идентификатор процесса, используйте pidof команду:

Команда напечатает все процессы Firefox:

Как только вы узнаете, что Firefox обрабатывает PID для завершения, все они посылают TERM сигнал:

Завершение процессов с помощью killall команды

Команда killall завершает все программы, которые соответствуют указанному имени.

Используя тот же сценарий, что и раньше, вы можете убить процесс Firefox, набрав:

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

Например, чтобы завершить все процессы, запущенные от имени пользователя «sara», вы должны выполнить следующую команду:

Завершение процессов с помощью pkill команды

pkill завершает процессы, которые соответствуют шаблону, указанному в командной строке:

Название процесса не должно быть точным совпадением.

С pkill его помощью вы также можете отправить сигнал процессам, которые принадлежат данному пользователю. Чтобы убить только процессы firefox, принадлежащие пользователю «sara», вы должны набрать:

Вывод

Завершение работы не отвечающих программ с помощью команд kill , killall and pkill — простая задача. Вам нужно только знать имя процесса или PID.

Читайте также:  Самый лучший ssd для windows

Источник

Завершение процессов в Linux

Каждая программа, утилита или какой-то другой элемент операционной системы Linux реализовывается в виде одного или нескольких процессов, которые функционируют в фоновом либо активном режиме. Каждый такой процесс потребляет определенное количество системных ресурсов и действует отведенный промежуток времени. Иногда случаются ситуации, требующие немедленного завершения («убийства») такой операции, что связано с ненадобностью ее выполнения или возникновением ошибок. В рамках сегодняшней статьи мы хотим поговорить о методах осуществления этой задачи.

Типы сигналов для завершения процессов

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

  1. SIGINT — стандартный сигнал, использующийся и в графических оболочках. При его отправлении процесс сохраняет все изменения, завершает выполняемые действия и только потом отключается. Если вы работаете через «Терминал», используйте комбинацию клавиш Ctrl + C, чтобы быстро «убить» текущий процесс.
  2. SIGQUIT — практически не отличается от предыдущего сигнала, но при его отправке программа уже сама решает, стоит ли завершать работу. При этом создается дамп памяти, что может быть полезно определенным пользователям. Это второй и последний сигнал, который можно послать сочетанием клавиш при взаимодействии с «Терминалом». Для этого используется комбинация Ctrl + /.
  3. SIGHUP — используется для разрыва связи с «Терминалом». Рекомендуется задействовать этот сигнал, если требуется прервать соединение с интернетом.
  4. SIGTERM — сразу же удаляет процесс, но его дочерние опции продолжают выполняться до полного завершения операций, а после производится освобождение системных ресурсов.
  5. SIGKILL — аналогичный предыдущему сигнал, но при этом оставшиеся дочерние задачи не прекращают свое функционирование.

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

Завершаем процессы в Linux

Существуют разные системные средства, позволяющие «убить» какой-либо процесс. Иногда для этого приходится узнавать его идентификатор, а в других ситуациях достаточно только названия. Далее мы предлагаем детально изучить все представленные методы, чтобы найти оптимальный для себя и выполнять его при необходимости, учитывая описанные ранее сигналы.

Способ 1: «Системный монитор»

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

    Перейдите в меню «Показать приложения», где отыщите «Системный монитор» и запустите его, кликнув по значку левой кнопкой мыши.

Дополнительно вы можете переместиться в свойства объекта через контекстное меню, чтобы посмотреть всю информацию о нем.

Щелкните правой кнопкой мыши по строке и выберите пункт «Завершить». Это же действие выполняется через горячую клавиш Ctrl + E. Еще внизу имеется кнопка, позволяющая завершить процесс без вызова контекстного меню.

Если же операция не завершилась по каким-либо причинам, задействуйте опцию «Убить».

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

Способ 2: Команда kill

Для применения команды kill потребуется знание PID (идентификатора процесса), поскольку именно так осуществляется применение аргументов. В статье ниже мы детально описали операцию просмотра списка процессов для получения различной информации. Обязательно ознакомьтесь с ней перед выполнением следующей инструкции.

Далее остается только запустить «Терминал» и задействовать упомянутую команду. Для начала изучите ее простой синтаксис: kill -сигнал pid_процесса . Теперь давайте рассмотрим пример «убийства».

    Откройте меню приложений и запустите «Терминал».

Введите простую команду ps aux | grep name для получения информации об указанном процессе, где name — имя желаемой программы.

Читайте также:  Установка windows через биос usb

В отобразившемся результате отыщите главный PID и запомните его.

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

Теперь вы можете снова использовать ps aux | grep name , чтобы проверить, была ли завершена операция.

То же самое действие по «убийству» осуществляется и через другой аргумент путем ввода kill -TERM .

Если приведенные выше команды не принесли никакого результата, потребуется обозначить сигнал SIGKILL, вставив команду kill -KILL .

Учтите, что некоторые процессы запускаются от имени суперпользователя, соответственно, для их завершения требуются привилегии. Если при попытке ввода kill вы получаете информацию «Отказано в доступе», вводите перед основной командой sudo, чтобы получилось sudo kill .

Способ 3: Команда pkill

Следующая консольная утилита называется pkill и является модернизированной версией предыдущей команды. Здесь все реализовано точно по такому же образу, но вместо PID от пользователя требуется вводить название процесса.

    Для отправки сигнала SIGTERM используйте pkill + название процесса .

После вы можете убедиться, что операция была успешно завершена.

Задайте вручную тип сигнала, введя такую форму pkill -TERM ping , где -TERM — необходимый сигнал.

Используйте pgrep для определения того, что процесс больше не выполняется, если вы не хотите задействовать ps

Способ 4: Команда killall

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

Теперь вы знаете все о завершении процессов в Linux. Перед выполнением методов убедитесь, что принудительное «убийство» не приведет к системным сбоям. Если же ни один вариант не позволил полностью избавиться от процесса, попробуйте просто перезагрузить компьютер или удалить софт, связанный с этой опцией.

Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Источник

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

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

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

Как происходит завершение процесса?

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

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

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

Важно понимать, что нужно дать процессу возможность завершиться корректно. Желательно, чтобы порты и сокеты были освобождены, закрыты и удаленны временные файлы. Поэтому никогда не передавайте сразу 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 очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.

Источник

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