Как завершить зависший процесс linux

Содержание
  1. Kill: Завершение неконтролируемых процессов
  2. Программисты против пользователей
  3. Сигналы и контроль над процессами
  4. Вернемся к нашим SIGHUP’ам
  5. Применение команды kill к процессам
  6. Команда kill, встроенная в Bash
  7. Ресурсы
  8. 7 способов «убить» зависшее приложение в Linux
  9. 1. Завершить программу в Linux, просто нажав на «X»
  10. 2. Воспользуйтесь системным монитором, чтобы «убить» процесс Linux
  11. 3. Принудительное уничтожение процесса Linux с помощью xkill
  12. 4. Используйте команду «kill»
  13. 5. Используйте команды «pgrep» и «pkill»
  14. 6. Уничтожить все экземпляры процесса с помощью «killall»
  15. 7. Создайте комбинацию клавиш
  16. Избегайте зависаний программ: обновите свое оборудование
  17. Команда Kill, Pkill, Killall. Как Убить Процесс в Linux
  18. Как узнать идентификатор процесса (PID) в Linux
  19. Как показать все сигналы команды kill
  20. Как убить процесс в Linux с помощью терминала
  21. Использование команды kill с PID
  22. Как убить несколько процессов в Linux
  23. Как убить процесс в Linux с помощью команды Pkill
  24. Как убить процесс в Linux с помощью команды killall
  25. Итоги

Kill: Завершение неконтролируемых процессов

Вы усердно боретесь с особо заковыристым приложением Линукс. Продираясь через дебри документации, запускаете команды и правите конфигурационные файлы. Все работает, и жизнь прекрасна. Как вдруг вас ошарашивает сообщение «send the process a SIGHUP» (пошлите процессу SIGHUP).

По инерции вы движетесь дальше. Что это за SIGHUP такой, и как его посылают? Вы почти уверены, что это не команда, но, на всякий случай, пробуете. Нет, не то. Перечитываем ман к приложению:

Когда получен сигнал о том, что программа зависла — SIGHUP, sshd перечитывает свой конфигурационный файл путем запуска самой себя с теми же именем и опциями, с которыми была первоначально запущена, например, /usr/sbin/sshd.

Программисты против пользователей

Сигналы и контроль над процессами

Сигналы нужны для того, чтобы взаимодействовать с процессами и демонами. Процессом называется любое активное действие. Демоны являются фоновыми (background) процессами, и до поры скрыты. Они ждут либо события, на которое они отреагируют, либо наступления времени, назначенного для выполнения некоего задания по расписанию. О наступлении этого события они узнают, получая сигнал от какого-то другого процесса. Каждая программа должна иметь в своем коде обработчик сигналов, чтобы отслеживать (перехватывать) сигналы и правильно реагировать на них. Страница руководства man signal описывает всевозможные сигналы и их действия. Сигналы посылают при помощи команды kill («убить»). Команда kill -l выводит список сигналов и их номеров.

Все демоны и процессы имеют Идентификатор Процесса (PID). PID процесса можно узнать при помощи команды ps:

В приведенном выше примере, вывод команды сильно сокращен — в вашей системе вы увидите куда больше строк и столбцов. Если какой-нибудь процесс «ворует» мощность вашего процессора или вашу память, вы увидите это в столбцах %CPU и %MEM.

Еще быстрее «зарвавшийся» процесс можно обнаружить при помощи команды top. В ней, по умолчанию, процессы, потребляющие больше ресурсов процессора, расположены в верхних строках таблицы. Мы можем немного поиграть с программой top при помощи команды yes:

$ yes carla is teh awesum

Эта команда станет повторять «carla is teh awesum» с большой скоростью, пока вы ее не остановите. Она загонит процент использования процессора в красную зону:

Интересно, что ответственность за разбазаривание мощности CPU ложится на консоль, а не на программу yes, так как yes работает внутри консоли. Если вы перейдете на «истинную» консоль (Ctrl+Alt+F2), то там увидите программу yes с большими цифрами потребления мощности процессора и использования памяти.

Существует несколько способов остановить yes. Если вы перейдете обратно в шелл, где она работает, просто нажмите Ctrl+C. Вы можете также остановить ее при помощи команды kill в другом шелле, как по PID, так и по имени:

$ kill 22236
$ killall yes

Ctrl+C посылает с клавиатуры сигнал SIGINT (2), или завершающее прерывание (terminate interrupt). kill и killall, оба, шлют по умолчанию SIGTERM (15). SIGTERM (15) может быть перехвачен и, либо игнорирован, либо интерпретирован иначе. Так что, в случае непредсказуемой работы, вы можете не добиться завершения процесса.

Применяя команду kill к родительскому процессу, вы, как правило (но не всегда), завершаете дочерний вместе с ним. Как узнать, какой процесс является дочерним? Используйте команду ps с опцией -f :

Читайте также:  Команды для терминала windows

Вернемся к нашим SIGHUP’ам

# killall -HUP ‘process-name’

Как видите, можно использовать PID или имя процесса, а также имя или номер сигнала.

Зачем применять все эти команды, когда можно перезапустить процессы при помощи команды /etc/init.d/foo restart? Ведь предпочтительней контролировать сервисы с помощью их файлов init, так как такой контроль обычно включает санацию, проверку ошибок и другие функции. Если говорить честно, то главная причина использовать команду kill и сигналы состоит в том, чтобы остановить зависший или сбойный процесс как можно аккуратнее, и не прибегать к перезагрузке или завершению сеанса.

Применение команды kill к процессам

kill -STOP ‘pid’
SIGSTOP (19) останавливает процесс, не «убивая» его.

kill -CONT ‘pid’
SIGCONT (18) перезапускает остановленный процесс.

kill -KILL ‘pid’
SIGKILL (9) форсирует немедленное завершение процесса, и не производит никакой чистки.

kill -9 -1
Завершает все ваши процессы (которыми вы владеете).

SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или игнорированы; остальные могут. Это ваше «большое ружье», последнее средство обороны.

Команда kill, встроенная в Bash

$ type -all kill
kill is a shell built-in
kill is /bin/kill

Маловероятно, что у вас возникнут конфликты или странное поведение программ, но на всякий случай выбирайте /bin/kill.

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

Ресурсы

  • Глава 7 «Starting and Stopping Linux», Поваренная книга Линукс (the Linux Cookbook)

bash (1) — GNU Bourne-Again Shell

yes (1) — повторно выводит строку, пока не будет остановлена

signal (7) — список сигналов

ps (1) — мгновенный снимок идущих процессов

kill (1) — посылает сигнал процессу

killall (1) — «убивает» процесс по имени

pkill (1) — ищет или дает сигнал процессам на основе имени или других атрибутов

skill (1) — посылвет сигнал, либо рапортует о статусе процесса

  • xkill (1) — «убивает» клиента по его Х ресурсу
  • Источник

    7 способов «убить» зависшее приложение в Linux

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

    Если у вас возникают такие проблемы, вот несколько способов, как принудительно завершить программу в Linux.

    1. Завершить программу в Linux, просто нажав на «X»

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

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

    2. Воспользуйтесь системным монитором, чтобы «убить» процесс Linux

    Следующий вариант — открыть утилиту System Monitor вашей операционной системы Linux. Обычно она находится в меню «Системные инструменты» и отображает список запущенных процессов на вкладке «Процессы«.

    Чтобы закрыть не отвечающее приложение, просто выберите его и щелкните правой кнопкой мыши. Затем у вас появится три варианта:

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

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

    3. Принудительное уничтожение процесса Linux с помощью xkill

    Другой вариант — использование команды xkill в терминале. Это инструмент принудительного уничтожения процесса, который предустановлен в Ubuntu, но его можно также установить через терминал в других дистрибутивах, если необходимо. xkill позволит закрыть любой процесс. Установить его можно с помощью следующей команды:

    Читайте также:  Сколько места оставлять под windows 10

    Как только установите, наберите:

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

    Если невозможно закрыть зависшее приложение одним из этих методов, то решение может быть в терминале Linux.

    4. Используйте команду «kill»

    Если ни один из вышеперечисленных методов не помог и приложение до сих пор не отвечает, нажмите Ctrl + Alt + T, чтобы открыть терминал.

    Есть несколько команд, которые должны помочь закрыть ваше приложение. Более того, их можно использовать как на вашем компьютере, так и подключившись удаленно через SSH.

    Команда kill может быть использована только с указанием идентификатора процесса. Сначала выясним его:

    В результате вы увидите ID нужного процесса. Далее используем команду:

    Возможно, вам понадобятся системные права для использования программы, тогда используйте sudo.

    5. Используйте команды «pgrep» и «pkill»

    Что, если вы не смогли найти идентификатор процесса. Здесь вам поможет команда pkill.

    Кроме того, можно использовать команду pgrep, чтобы найти идентификатор процесса:

    После этого используйте команду pkill с ID процесса.

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

    6. Уничтожить все экземпляры процесса с помощью «killall»

    Не повезло с kill или pkill? Пришло время использовать ядерную опцию: killall.

    К счастью, она не так разрушительна, какой могла бы быть. Команда killall завершит все экземпляры указанной программы. Таким образом, вместо того, чтобы убивать одно окно Firefox, данная команда завершит их все:

    Все, что вам нужно, это имя процесса и команда killall (возможно, с sudo, если этого требует ваша система).

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

    7. Создайте комбинацию клавиш

    Хотите сэкономить время на закрытие не отвечающего программного обеспечения? Наилучшим вариантом является создание сочетания клавиш. Это даст вам возможность немедленно закрыть приложение, но для этого потребуется xkill.

    В Ubuntu откройте «Настройки«>«Клавиатура» и нажмите «Комбинации клавиш«. Выберите Дополнительные комбинации, затем +, чтобы создать новую. Введите «xkill» для названия, затем нажмите «Применить«. Это вернет вас к списку комбинаций — выберите нужную, затем нажмите необходимую комбинацию клавиш, которую вы будете использовать для ее вызова.

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

    Избегайте зависаний программ: обновите свое оборудование

    Зависающие программы постоянно вызывают проблемы? Возможно, пора немного обновить ваш компьютер.

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

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

    1. Завершить программу в Linux, просто нажав на «X».
    2. Воспользуйтесь системным монитором, чтобы «убить» процесс Linux.
    3. Принудительное уничтожение процесса Linux с помощью xkill.
    4. Используйте команду «kill».
    5. Используйте команды «pgrep» и «pkill».
    6. Уничтожить все экземпляры процесса с помощью «killall».
    7. Создайте сочетание клавиш.

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

    Источник

    Команда Kill, Pkill, Killall. Как Убить Процесс в Linux

    Задачи в Linux называются процессами. Каждый процесс имеет уникальный идентификатор. Чтобы завершить запущенные процессы Linux, мы можем использовать команду kill. В этом руководстве мы покажем вам, как убить процесс в Linux, чтобы улучшить ваши навыки управления VPS.

    Иногда вы можете запустить сервер или приложение, забыть об этом, и вам нужно его выключить. В таких сценариях мы можем использовать команду kill.

    Ниже приведены несколько примеров, в которых может быть полезна команда kill:

    • Чтобы остановить любой автоматизированный процесс
    • Чтобы остановить процесс, который был запущен случайно
    • Чтобы остановить процесс, который потребляет много памяти
    • Чтобы принудительно остановить любой процесс, запущенный в Linux
    • Чтобы остановить фоновый процесс
    Читайте также:  Sublime text ��� linux mint

    Помимо остановки процесса, команда kill может выполнять ещё несколько функций. Например, послать сигнал процессу. По умолчанию это воспринимается как сигнал TERM, который завершает процесс.

    Как узнать идентификатор процесса (PID) в Linux

    Команды kill позволяют завершить процесс, используя идентификатор процесса, также известный как pid. Чтобы узнать pid процесса в Linux, выполните следующую команду:

    Команда перечислит все доступные процессы с pid. Если вы хотите сделать свой список более конкретным – добавьте команду grep следующим образом:

    В этом примере, команда выведет все запущенные Java-процессы.

    Как показать все сигналы команды kill

    В Linux доступно несколько сигналов, которые можно использовать для прерывания, завершения или приостановки процессов. Вот пример использования команды:

    Эта команда отобразит страницу руководства с различными сигналами kill с их именами и соответствующими номерами. Несмотря на то, что доступно несколько сигналов, в большинстве случаев мы будем использовать SIGKILL (9) и SIGTERM (15).

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

    Теперь мы готовы двигаться дальше и изучать различные способы использования команды kill. Чтобы продолжить, войдите на свой VPS-сервер с помощью SSH.

    Использование команды kill с PID

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

    Здесь 63772 – это идентификатор процесса, который мы хотим завершить. Поскольку сигнал не указан, это будет сигнал SIGTERM. Иногда это может не сработать; в этом случае вам, возможно, придётся принудительно убить процесс.

    В таких случаях вы можете использовать формат команды, как показано ниже:

    Ниже приведён пример команды для принудительного завершения процесса:

    Точно так же вы можете использовать сокращённый вариант команды для завершения процесса Linux:

    Замените 63772 соответствующим pid для прекращения процесса.

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

    С помощью одной и той же команды вы можете убить несколько процессов. Синтаксис этой команды будет следующим:

    Вот пример, показывающий, как это будет выглядеть на практике:

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

    Pkill – разновидность команды kill, в которой вы можете указать имя процесса или паттерн для его поиска:

    Приведенная выше команда завершит работу браузера Chrome. Вы также можете указать частичное совпадение запроса в командной строке, например:

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

    Вы можете проверить список, указав полное имя процесса:

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

    Вы можете проверить список процессов с похожим названием, используя лишь часть имени:

    Эта команда выведет список процессов с соответствующим ID процесса.

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

    Основное различие между killall и kill заключается в том, что killall может завершить процесс по имени, в то время как команда kill использует pid.

    Пример такой команды:

    Команда напоминает pkill. Однако killall использует точное соответствие имени, а pkill может убить процесс, сопоставив паттерн. Это одна из причин, по которой killall безопаснее, чем pkill.

    Ещё одно отличие – это корневой пакет, к которому принадлежат команды. В Linux, killall принадлежит пакету psmisc. С другой стороны, такие команды, как ps, top, kill, pkill, принадлежат пакету procps.

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

    Вы также можете использовать следующие параметры вместе с командой killall:

    • s – секунды
    • m – минуты
    • h – часы
    • d – дни
    • w – недели
    • M – месяцы
    • y – годы

    Итоги

    В этом руководстве мы охватили наиболее важные и полезные команды kill в Linux. Теперь вы знаете, как использовать эту утилиту, чтобы убить процесс. Если вы хотите узнать больше о её возможностях, обратитесь к руководству по Linux. Удачи в вашем проекте, до встречи в следующем уроке!

    Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

    Источник

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