- Как убить процесс Linux
- Как происходит завершение процесса?
- Как убить процесс Linux?
- Как завершить процесс с помощью pkill
- Как остановить процесс с помощью killall
- Выводы
- 7 способов «убить» зависшее приложение в Linux
- 1. Завершить программу в Linux, просто нажав на «X»
- 2. Воспользуйтесь системным монитором, чтобы «убить» процесс Linux
- 3. Принудительное уничтожение процесса Linux с помощью xkill
- 4. Используйте команду «kill»
- 5. Используйте команды «pgrep» и «pkill»
- 6. Уничтожить все экземпляры процесса с помощью «killall»
- 7. Создайте комбинацию клавиш
- Избегайте зависаний программ: обновите свое оборудование
Как убить процесс 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:
В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:
И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:
Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.
Как завершить процесс с помощью pkill
Утилита pkill — это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:
Также можно вручную задать тип сигнала:
Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:
Но если вам программа создала несколько процессов, например, браузер chromium или firefox создают отдельный процесс для каждой из вкладок, то эта утилита мало чем поможет. Тут нужен следующий вариант.
Как остановить процесс с помощью killall
killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:
Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:
Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:
Выводы
В этой статье мы рассмотрели как убить процесс Linux. Иногда эта задача может быть очень полезной, но важно понимать, что ее нужно выполнять правильно. Нельзя сказать, что передача SIGKILL вместо SIGTERM очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
7 способов «убить» зависшее приложение в Linux
Программное обеспечение Linux достаточно надежно, но бывает, что даже самые лучшие приложения могут зависнуть. Вместо того, чтобы ждать сообщения о сбое в работе приложений, вы можете «убить» их, принудительно завершив. На самом деле способов это сделать существует настолько много, что глаза разбегаются!
Если у вас возникают такие проблемы, вот несколько способов, как принудительно завершить программу в Linux.
1. Завершить программу в Linux, просто нажав на «X»
Вы, наверное, уже пытались уйти и сделать себе чашечку кофе, но когда вернулись, обнаружили, что ваша программа зависла, вероятно, у него было достаточно времени, чтобы «отвиснуть», но этого не произошло. Зависшее приложение обычно имеет серые неактивные кнопки управления и у него пропадает возможность перемещения.
Итак, как эту проблему решить? Нажмите на «крестик» в верхнем углу (слева или справа, в зависимости от версии системы Linux). Это должно помочь. Возможно, появится окно с просьбой подождать или принудительно завершить процесс, а также отправить отчет об ошибке.
2. Воспользуйтесь системным монитором, чтобы «убить» процесс Linux
Следующий вариант — открыть утилиту System Monitor вашей операционной системы Linux. Обычно она находится в меню «Системные инструменты» и отображает список запущенных процессов на вкладке «Процессы«.
Чтобы закрыть не отвечающее приложение, просто выберите его и щелкните правой кнопкой мыши. Затем у вас появится три варианта:
- Остановить: приостанавливает процесс, позволяя продолжить его позже. Не будет работать в большинстве случаев.
- Завершить: правильный способ закрыть процесс, он безопасно завершит работу приложения, вместе с ним удаляя временные файлы.
- Убить: вариант на крайний случай и его рекомендуется применять только в случае сбоя.
Лучше всего использовать их по порядку. Однако, если приложение регулярно зависает, можно использовать вариант, в котором вы точно уверены.
3. Принудительное уничтожение процесса Linux с помощью xkill
Другой вариант — использование команды xkill в терминале. Это инструмент принудительного уничтожения процесса, который предустановлен в Ubuntu, но его можно также установить через терминал в других дистрибутивах, если необходимо. xkill позволит закрыть любой процесс. Установить его можно с помощью следующей команды:
sudo apt install xorg-xkill
Как только установите, наберите:
Вместо указателя мыши появится крест (или череп). Далее необходимо щелкнуть левой кнопкой мыши на зависшем приложении, чтобы закрыть его.
Если невозможно закрыть зависшее приложение одним из этих методов, то решение может быть в терминале Linux.
4. Используйте команду «kill»
Если ни один из вышеперечисленных методов не помог и приложение до сих пор не отвечает, нажмите Ctrl + Alt + T, чтобы открыть терминал.
Есть несколько команд, которые должны помочь закрыть ваше приложение. Более того, их можно использовать как на вашем компьютере, так и подключившись удаленно через SSH.
Команда kill может быть использована только с указанием идентификатора процесса. Сначала выясним его:
ps aux | grep [имя программы]
В результате вы увидите 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 зависнет и перестанет отвечать на запросы, все, что вам нужно сделать, это применить одно из следующих решений:
- Завершить программу в Linux, просто нажав на «X».
- Воспользуйтесь системным монитором, чтобы «убить» процесс Linux.
- Принудительное уничтожение процесса Linux с помощью xkill.
- Используйте команду «kill».
- Используйте команды «pgrep» и «pkill».
- Уничтожить все экземпляры процесса с помощью «killall».
- Создайте сочетание клавиш.
Если ни одно из этих решений не работает и вы регулярно испытываете не отвечающие приложения Linux, рассмотрите возможность перехода на облегченную операционную систему Linux.