Если вы работали с любым дистрибутивом Linux, вы знаете, что под капотом процессы представляют все, от приложений до устройств. Приложения инициируют множество процессов для обеспечения различных функциональных возможностей.
Процессы могут зависать по нескольким причинам, включая попадание в цикл или ожидание ввода от других процессов и устройств. Зависшие процессы могут замораживать элементы пользовательского интерфейса и негативно влиять на взаимодействие с пользователем.
Вот почему Linux позволяет пользователям завершать процессы различными командами.
В этой статье мы обсудим, как завершить процесс в Linux. Мы начнем с краткого обсуждения того, как составить список процессов, чтобы получить соответствующие идентификаторы процессов. Далее мы подробно рассмотрим команды, которые вы используете для завершения процесса в Linux.
Каждый процесс, независимо от того, запущен ли он пользователями или системными компонентами, имеет числовой идентификатор (называемый PID), который однозначно идентифицирует его во всей системе.
Интересная особенность процессов и PID заключается в том, что всем экземплярам одного и того же процесса присваивается уникальный PID. В результате вы можете различать экземпляры и выбирать для завершения конкретный экземпляр, а не все экземпляры процесса. Это очень полезно в ситуациях, когда вы запускаете параллельные экземпляры утилиты, такой как менеджер пакетов.
Процессы в вашей системе Linux можно условно разделить на две категории – процессы переднего плана и фоновые процессы. Сейчас мы обсудим, как найти PID процессов переднего плана или фоновых процессов.
Linux предлагает несколько вариантов просмотра информации (включая PID) о процессах переднего плана. Мы упомянем три команды, которые помогут вам определить правильный PID, который вы можете использовать для завершения процесса.
Команда ps – это очень гибкий способ обнаружения процессов, запущенных в системе. При использовании без каких-либо параметров она просто отображает процессы переднего плана для текущего вошедшего в систему пользователя. Эта команда также используется для определения текущего PID оболочки.
Синтаксис команды следующий:
# ps
Однако вы можете получить более полное представление о процессах, добавив в команду флаги a, u и x. Выходные данные команды показывают конкретную команду, связанную с PID. Команда в данном контексте:
# ps aux
Если вы знаете имя процесса, вы можете использовать команду pidof, чтобы найти его PID. Синтаксис команды таков:
# pidof <flags> <process name>
Эта команда поддерживает следующие флаги:
Например, рассмотрим следующую команду, чтобы получить PID, связанный с командой cat в нашей тестовой системе:
# pidof cat
pgrep – это простая команда для возврата информации о процессе с помощью частичного шаблона. Например, команда использует регулярное выражение (a *) в качестве шаблона подстановки. Синтаксис этой команды таков:
pgrep <flags> <pattern>
Вы можете использовать следующие флаги с помощью команды pgrep:
Типичным вариантом использования этой команды является следующая команда, которая перечисляет все процессы от пользователя root, которая содержит “a” в начале имени процесса.
# pgrep -l -u root 'a*'
Прежде чем вы сможете завершить фоновый процесс, вам необходимо знать правильный PID. Вы можете использовать команды ps и pidof, чтобы найти PID для фоновых процессов.
Вы можете использовать слегка измененную версию команды ps для получения списка PID процессов, соответствующих определенному имени процесса. Обратите внимание, что синтаксис этой команды передает выходные данные команды ps в grep для фильтрации выходных данных:
# ps -e | grep -i 'pattern'
Утилита top предлагает подробное представление системных процессов. Простым вызовом утилиты из командной строки вы можете получить описание всех активных процессов, включая фоновые.
# top
Нажмите “q“, чтобы выйти из утилиты.
Теперь, когда вы знаете, как найти PID процесса, мы можем перейти к следующей половине этой статьи. Здесь мы обсудим два метода завершения процесса.
Вы знаете, как использовать утилиту Top для составления списка процессов, чтобы узнать PID процесса, который вы хотите завершить. Эта команда также отображает идентификаторы пользователей и процессов, а также информацию об использовании памяти и процессора каждым процессом. Кроме того, вы можете завершить процесс с помощью этой утилиты. Для этого выполните следующие действия:
# top
Команда kill очень универсальна и поставляется с несколькими связанными утилитами для удовлетворения конкретных сценариев.
Прежде чем углубляться в детали команды kill и связанных с ней утилит, важно понять, как работает команда kill, и идею сигналов.
Когда вы вводите команду kill и включаете PID, команда отправляет процессу сигнал TERM/15 по умолчанию. Этот сигнал дает процессу достаточно времени для сохранения любых несохраненных данных и обеспечения плавного завершения. Однако вы можете отправлять другие сигналы для завершения процессов в определенных условиях. Вот краткий обзор наиболее распространенных сигналов, которые вы можете использовать с помощью команды:
Вы можете запустить команду kill -l для получения полного списка всех сигналов.
Вы можете уничтожить несколько процессов одной командой, добавив PID к команде kill. Мы рекомендуем соблюдать крайнюю осторожность при вводе PID, поскольку система не будет проверять список PID и отправлять сигнал SIGTERM или SIGKILL.
Синтаксис команды следующий:
# kill <PID1> <PID2> …
Системные вызовы kill очень гибкие и подходят для всех важных сценариев, когда вам нужно вмешаться в нормальный ход выполнения процесса.
Вы можете немедленно завершить процесс, отправив ему сигнал kill 9 (SIGKILL). Процесс, не отвечающий на запросы, может не отправлять никакой обратной связи, но завершается при получении инструкции kill -9. Обратите внимание, что команда не соответствует стандартному процессу завершения работы и, следовательно, может привести к потере данных.
Рассмотрим следующую команду для завершения фиксированного процесса с PID 29046:
# kill -9 29046
Это отправляет системный вызов kill процессу. Мы использовали команду ps, чтобы проверить, был ли этот вызов kill 9 успешным
# ps 29046
Используйте команду killall, чтобы завершить процесс по имени. Эта команда по умолчанию выдает сигнал SIGTERM. Эта команда может завершить несколько процессов за один раз.
Синтаксис этой команды таков:
# killall <process>
Вы можете использовать следующие флаги с командой:
Команда killall может использоваться для завершения процессов по возрасту (продолжительности времени). Для этого используйте следующие флаги вместе с командой:
Например, команда killall -o 15m завершит работу процессов, которым более 15 минут. Аналогично, команда killall -y 15m уничтожит процессы, которым меньше 15 минут.
Другой вариант использования команды killall заключается в уничтожении нескольких процессов путем упоминания их имен в команде. Синтаксис команды следующий:
# killall <process_name_1> <process_name_2> <process_name_3>
Вы можете использовать этот синтаксис команды для завершения процессов с похожим именем. В этом контексте мы рекомендуем использовать подстановочный знак для включения всех связанных процессов:
# killall <process_name>*
Как и в большинстве системных вызовов kill, вы можете указать сигнал в команде killall. По умолчанию команда killall отправляет процессам сигнал SIGTERM. Вы можете изменить это с помощью следующего синтаксиса команды:
# killall -s SIGKILL <process_name_1> <process_name_2> <process_name_3>
Команда pkill похожа на команду pgrep в том смысле, что она завершит процесс после обнаружения процесса на основе определенных критериев. По умолчанию команда выдает сигнал SIGTERM.
Синтаксис команды таков:
# pkill <flags> <pattern>
Вы можете использовать следующие флаги с помощью команды pkill:
Команда xkill обычно используется для прекращения связи сервера с клиентами. Синтаксис команды таков:
# xkill <resource>
Вместо завершения вы можете остановить процесс, отправив соответствующий сигнал SIGSTOP. Обратите внимание, что этот сигнал действует как кнопка приостановки процесса.
Рассмотрим следующую команду, которая отправляет сигнал SIGSTOP фиксированному процессу с PID 30866. Теперь мы отправим сигнал SIGSTOP этому процессу следующей командой:
# kill -s SIGSTOP 30866
Теперь проверьте состояние процесса с помощью следующей команды ps:
# ps 30866
В столбце STAT выходных данных отобразится T, что указывает на то, что процесс остановлен.
Вы можете использовать этот процесс для завершения процесса в Unix-подобных средах, которые поддерживают стандартную реализацию команды kill. Это полезная идея, когда вы хотите временно заблокировать выполнение процесса.
Это обычное операционное требование при запуске процесса, выполнение которого занимает много времени. В других случаях процессу часто приходится ждать завершения других процессов, чтобы выходные данные этих процессов можно было использовать в качестве входных данных для целевого процесса.
Важным вариантом использования для завершения процессов в Linux является завершение текущей оболочки. Оболочка может зависнуть во время операции или перестать отвечать на запросы в ожидании ответа. В этих случаях самый простой вариант – отключить оболочку и запустить новый терминал.
Это, казалось бы, невозможное действие возможно, потому что в Linux оболочка – это просто еще один процесс, запущенный в системе.
Первый шаг этого процесса – узнать PID вашей текущей оболочки. Для этого перейдите в оболочку и получите идентификатор процесса текущего процесса (оболочки). Команда для получения этого PID выглядит следующим образом:
# echo $$
Теперь вы можете использовать PID процесса оболочки с помощью команды kill -9, чтобы завершить работу оболочки.
При выполнении команды для завершения процессов учитывайте следующее:
Знание того, как остановить процесс в Linux, является ключом к поддержанию стабильной и отзывчивой системы Linux.
Вы можете использовать такие команды, как kill и pkill, для отправки процессам определенных сигналов завершения. Обратите внимание, что некоторые команды могут принудительно завершать процессы, что приводит к потере данных.
Вопрос: Как завершить процесс в Unix / Linux?
Вы можете завершить процесс в среде операционной системы на базе Unix, инициировав системный вызов kill. В зависимости от ситуации вы можете использовать системные вызовы kill SIGTERM/15 или SIGKILL/9.
Вопрос: Какова цель завершения процесса в Linux?
Завершение процесса в Linux необходимо по разным причинам, таким как завершение работы не отвечающих на запросы или неисправных приложений, управление системными ресурсами и поддержание стабильности системы.
Вопрос. В чем разница между командами “kill” и “pkill”?
Команда kill отправляет сигналы по умолчанию определенным процессам, используя их идентификаторы процессов (PID), в то время как “pkill” позволяет завершать процессы по имени, что делает ее более удобной для пользователя.
Вопрос: Какой сигнал отправляется по умолчанию при использовании команды “kill”?
По умолчанию команда kill отправляет сигнал SIGTERM, позволяя процессу выполнить операции очистки перед завершением.
Вопрос: Как я могу принудительно завершить процесс, который не отвечает на сигнал SIGTERM?
Чтобы принудительно завершить процесс, используйте команду kill с сигналом SIGKILL (номер сигнала 9).
Вопрос: Существуют ли какие-либо риски, связанные с завершением процессов в Linux?
Да, завершение процессов следует выполнять осторожно. Завершение критически важных для системы процессов или приложений может привести к нестабильности системы или потере данных. Важно определить правильный процесс для завершения.
Вопрос: Могу ли я автоматизировать процесс завершения определенных процессов в Linux?
Да, вы можете создавать сценарии или использовать такие инструменты, как pkill, в сочетании с другими командами для автоматизации процесса завершения определенных процессов.
Вопрос. Возможно ли отправлять пользовательские типы сигналов процессам с помощью команды kill?
Да, вы можете отправлять пользовательские сигналы, указав номер сигнала при использовании команды kill . Это позволяет более детально контролировать процесс завершения.
Вопрос: Как я могу проверить, какие процессы запущены в моей системе Linux, прежде чем принимать решение, какие из них следует завершить?
Вы можете использовать команду ps для составления списка запущенных процессов. Это предоставляет информацию об их PID, использовании ресурсов и состоянии.
Вопрос. Какие шаги я должен предпринять после завершения процесса, чтобы обеспечить стабильность системы?
После завершения процесса крайне важно отслеживать поведение системы и устранять любые проблемы, которые могли привести к неправильному поведению процесса или его невосприимчивости.
Вопрос: Существуют ли альтернативы уничтожению процессов для управления системными ресурсами в Linux?
Да, вы можете использовать инструменты управления ресурсами, такие как nice и renice, чтобы настроить приоритеты процессов или по возможности увеличить системные ресурсы, чтобы не завершать процессы.