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

24

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

На компьютере с Windows я нажимал бы комбинацию клавиш CTRL-ALT-DEL, чтобы открыть диспетчер задач, найти процесс, вызвавший зависание, и уничтожить его.

Так как я довольно новичок в использовании linux, я не нашел наилучшей практики для решения такой ситуации в Ubuntu.

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

NES
источник

Ответы:

32

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

Системный монитор

Это можно найти в Система> Администрирование

Счет

Вы также можете создать сочетание клавиш для этого в этой статье .

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

Процессор

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

убийство

Командная строка

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

Вверх

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

К

Просто введите PID процесса, который вы хотите убить, и нажмите Enter. Будет запрошен сигнал убийства для отправки. Чтобы убить процесс, используйте значение по умолчанию 15 - чтобы сразу его убить «Не проходите, не собирайте $ 200» используйте 9.

SIGKILL

Процесс будет прерван.

Если у вас медленный интерфейс, вы можете попробовать удаленно подключиться к SSH, если он включен, или переключиться на виртуальную консоль через Ctrl+ Alt+, F#где F#находится функциональная клавиша (F3, F4, F5 и т. Д.). Чтобы вернуться в среду рабочего стола, переключитесь на F7 или F8 в зависимости от вашей версии Ubuntu.

Марко Чеппи
источник
5
Отличный ответ. Я обычно назначаю сочетание клавиш CTRL + ESC на системный монитор. Это дает мне быстрый доступ к процессу уничтожения.
Хавьер Ривера
@ Марко Чеппи: куда делись изображения?
энзотиб
@enzotib Сообщение было обновлено
Марко Чеппи
1
+1 за системный монитор. Это может убить / остановить зависший процесс VLC, чего не может сделать htop.
Малисокан
@malisokan Вы уверены, что htopне можете этого сделать? Вы можете отправить SIGKILL, чтобы убить любой процесс зависания, на который у вас есть права.
говорит Вэл Восстановить Монику
4

Добавьте System Monitorапплет на свою панель ( щелкните правой кнопкой мыши на панели, выберите Add to Pannelи найдите System Monitor) и щелкните правой кнопкой мыши на нем, чтобы открыть приложение System Monitor.

Вы можете запустить приложение System Monitor, нажав Alt+F2и запустив программу gnome-system-monitor.

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

Рафаэль Боссек
источник
3

Большинство из них уже сказали (мне нравится ответ Марко Сеппи), но есть также апплет «Force Quit», который вы можете добавить на панель GNOME. Щелкните правой кнопкой мыши на панели и выберите «Добавить на панель ...»:

альтернативный текст

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


При запуске Unity в 11.04 конечно, это приложение больше не будет доступно. Существует проект замены Indicator-Forceclose, но он не включен в репозитории.

В качестве альтернативы мы могли бы бежать xkillиз терминала.

Takkat
источник
Это только разрушает окно или также убивает процесс?
Вэл говорит восстановить Монику
@val убивает процесс, который создал окно.
Таккат
Только что проверил: это не так. Я сделал программу, которая зависает внутри обратного вызова GTK, и убил ее с помощью xkill. Окно исчезло, но программа продолжала работать (или зависать, если хотите). Так что ответ - нет, программа может не убить программу, если она серьезно застряла.
Вэл говорит восстановить Монику
Естественно, @val после того, как ваша программа вызвала другой процесс для создания окна xkill, уничтожит только этот дополнительный процесс. Это особенно важно знать для программ, которые работают без X-сервера, но вызывают X для управления окнами. Очевидно, что было бы невозможно убить любую такую ​​программу с X-сервера.
Таккат
Моя программа не вызвала другой процесс для этого. Я сделал программу, которая похожа на любое приложение GTK, и повесила ее. xkillне влияет на такие процессы (GTK вызовет выход, если позже я выйду из «зависания» и заставлю его обрабатывать потерю окна). Обратные вызовы GTK не имеют ничего общего с многопроцессорностью.
говорит Вэл. Восстановить Монику