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

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) может быть перехвачен и, либо игнорирован, либо интерпретирован иначе. Так что, в случае непредсказуемой работы, вы можете не добиться завершения процесса.

Читайте также:  Анимированные темы для рабочего стола windows 10

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

Вернемся к нашим 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) — «убивает» клиента по его Х ресурсу
  • Источник

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

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

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

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

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

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

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

    Сигналы отключения системы

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

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

    • 1 (-HUP): перезагрузить процесс.
    • 9 (-KILL): убить процесс.
    • 15 (-TERM): чтобы корректно остановить процесс.
    Читайте также:  Управление другим компьютером windows

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

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

    Используйте параметр -l чтобы -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 и pkill — простая задача. Вам нужно только знать имя процесса или PID.

    Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

    Источник

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

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Windows 10 для ультрабуков

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

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

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

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

    Если невозможно закрыть зависшее приложение одним из этих методов, то решение может быть в терминале 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.

    Источник

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