Каждая программа, служебная программа или какой-либо другой элемент операционной системы Linux реализована как один или несколько процессов, работающих в фоновом или активном режиме. Каждый из этих процессов потребляет определенное количество системных ресурсов и действует в течение отведенного периода времени. Иногда возникают ситуации, требующие немедленного завершения («убийства») такой операции, что связано с ненужным выполнением или возникновением ошибок. В рамках сегодняшней статьи мы хотим поговорить о способах решения этой задачи.
Типы сигналов для завершения процессов
Для начала коснемся темы алгоритмов завершения процессов в дистрибутивах на базе Linux. Действие системных инструментов зависит от отправляемых сигналов, которые имеют разное значение и определяют выполнение определенной последовательности действий. Ниже мы представим способы, которыми можно указать тип сигнала для «уничтожения» операции, поэтому рекомендуется изучить их все, чтобы понять их правильное применение.
- SIGINT — стандартный сигнал, также используемый в графических оболочках. При отправке процесс сохраняет все изменения, завершает выполненные действия и только после этого отключается. Если вы работаете через «Терминал», используйте комбинацию клавиш Ctrl + C, чтобы быстро «закрыть» текущий процесс.
- SIGQUIT — практически не отличается от предыдущего сигнала, но при его отправке программа сама решает, выходить ли. Это создает дамп памяти, который может быть полезен некоторым пользователям. Это второй и последний сигнал, который может быть отправлен сочетанием клавиш при взаимодействии с «Терминалом». Для этого используйте комбинацию Ctrl + /.
- SIGHUP — используется для разрыва связи с «Терминалом». Рекомендуется включить этот сигнал, если вам нужно прервать подключение к Интернету.
- SIGTERM — немедленно завершает процесс, но его дочерние параметры продолжают выполняться, пока операции не будут завершены, а затем системные ресурсы будут освобождены.
- SIGKILL — аналогичен предыдущему сигналу, но остальные дочерние действия не прекращаются.
Теперь вы знаете все доступные сигналы для уничтожения процессов в разных дистрибутивах Linux. Используйте их вместе с командами в следующих методах в качестве аргументов.
Завершаем процессы в Linux
Существуют различные системные инструменты, позволяющие «убить» процесс. Иногда для этого нужно узнать его идентификатор, а в других ситуациях достаточно просто имени. Кроме того, мы предлагаем детально изучить все представленные методы, чтобы найти для себя оптимальный и провести его при необходимости с учетом сигналов, описанных выше.
Способ 1: «Системный монитор»
Начнем с более простого, но менее изменяемого метода, который запускается через программу с графическим интерфейсом и будет полезен тем пользователям, которые просто хотят завершить процесс, не прибегая к запуску команд терминала. Рассмотрим это на стандартной оболочке Ubuntu.
- Перейдите в меню «Показать приложения», где вы найдете «Системный монитор» и запустите его, щелкнув значок левой кнопкой мыши.
- В появившемся окне вы увидите список процессов. Найдите название задачи, которую нужно выполнить.
- Кроме того, вы можете получить доступ к свойствам объекта через контекстное меню, чтобы просмотреть всю информацию о нем.
- Щелкните строку правой кнопкой мыши и выберите Готово. То же действие выполняется с помощью горячих клавиш Ctrl + E. Также внизу есть кнопка, которая позволяет завершить процесс без вызова контекстного меню.
- Если операция не завершилась по какой-либо причине, воспользуйтесь опцией «Убить».
- Прочтите уведомление и подтвердите свои намерения.
В подавляющем большинстве графических оболочек системный монитор реализован аналогично, поэтому проблем с пониманием интерфейса возникнуть не должно.
Способ 2: Команда kill
Использование команды kill требует знания PID (идентификатора процесса), поскольку именно так применяются аргументы. В статье ниже мы подробно описали операцию отображения списка процессов для получения различной информации. Обязательно прочтите его, прежде чем следовать следующим инструкциям.
Так что все, что осталось, это запустить «Терминал» и использовать команду выше. Сначала изучите его простой синтаксис: kill -process_pid signal. Теперь давайте посмотрим на пример «убийства».
- Откройте меню приложения и запустите «Терминал».
- Введите простую команду ps aux | grep name для получения информации об указанном процессе, где name — это имя желаемой программы.
- В отображаемом результате найдите основной PID и запомните его.
- Введите kill PID, чтобы завершить процесс с помощью сигнала SIGTERM. Вместо PID должен быть написан ранее определенный идентификационный номер.
- Теперь вы можете использовать ps aux | grep, чтобы проверить, завершена ли операция.
- То же действие kill выполняется с помощью другого аргумента, набрав kill -TERM.
- Если вышеуказанные команды не увенчались успехом, вам нужно будет подписать сигнал SIGKILL, введя команду kill -KILL.
Обратите внимание, что некоторые процессы запускаются от имени суперпользователя и поэтому требуют привилегий для их завершения. Если вы получаете отказ в доступе при попытке ввести kill, введите sudo перед основной командой, чтобы получить sudo kill.
Способ 3: Команда pkill
Следующая утилита командной строки называется pkill и является модернизированной версией предыдущей команды. Здесь все реализовано точно так же, но вместо PID пользователь должен ввести имя процесса.
- Используйте pkill + имя процесса для отправки сигнала SIGTERM.
- Тогда вы сможете убедиться, что операция завершилась успешно.
- Установите тип сигнала вручную, вставив модуль pkill -TERM ping, где -TERM — это желаемый сигнал.
- Используйте pgrep, чтобы определить, не запущен ли процесс, если вы не хотите использовать ps
Способ 4: Команда killall
В крайнем случае, мы рассмотрим команду killall. Его работа и синтаксис точно такие же, как и у всех предыдущих утилит, поэтому мы не будем на этом останавливаться. Сразу поясним, что эта команда позволяет убить сразу все процессы с указанным именем и может использоваться в нескольких случаях.
Теперь вы знаете все о процессах уничтожения в Linux. Перед запуском методов убедитесь, что принудительное уничтожение не вызывает сбоев системы. Если ни один из вариантов не позволил вам полностью исключить процесс, просто попробуйте перезагрузить компьютер или удалить программное обеспечение, связанное с этим вариантом.
- https://lumpics.ru/ending-processes-in-linux/