Представьте себе: вы запустили программу, работаете с ней, а через время она перестает отвечать на запросы и виснет. Запустить повторно приложение невозможно из-за того, что ее экземпляр еще висит в памяти компьютера. Что делать в таком случае? В первую очередь нужно завершить работу программы и удалить процесс из памяти.
Наиболее простой и универсальный способ убить процесс в Linux — это использование терминальных команд. Данный вариант будет работать на любом дистрибутиве Linux.
Процессы в Linux
В операционной системе Linux процессом обычно называют запущенную программу или приложение. Также процессом можно называть любую задачу, которая работает в данный момент под управлением Linux. Любой работающий процесс может запустить дочерний.
Все процессы, работающие в Linux, имеют такие атрибуты:
Каждый запущенный процесс находится в одном из состояний:
- «Выполняется». Для обозначения этого состояния используется буква R.
- Процесс, который запустил системную операцию, например ввод или вывод данных, и ждет когда завершится ее выполнение, называется «Ожидание». Обозначается буквой S.
- Процесс, который остановлен пользователем или ОС Linux, находится в состоянии «Остановлен». Это состояние обозначается символом Т.
- «Зомби» — процессы, которые больше не выполняются, но потребляют ресурсы операционной системы. Обозначаются буквой Z.
- Непрерывный процесс нельзя завершить, пока не закончится операция прямого доступа в память. Обозначается процесс символом D.
Поиск процесса
Перед тем как в Linux убить процесс, его нужно сначала найти. Чаще всего для этой цели в Linux используют две команды top и ps.
Использование команды top
Команда top выводит на экран полный список текущих процессов. Кроме того, в списке содержится множество полезных сведений о каждом запущенном процессе, например:
- PID — уникальный номер процесса;
- USER — логин пользователя, который запустил данный процесс;
- PR — приоритет процесса в данный момент времени;
- NI — приоритет присвоенные процессу командой NICE;
- S- состояние данного процесса;
- %CPU- сколько процессорного времени занимает данный процесс (в процентах);
- %MEM- объем оперативной памяти, которую занимает данный процесс (в процентах);
- TIME+ — сколько времени прошло с момента запуска процесса;
- COMMAND — программа, которая запустила процесс.
Информация, предоставляемая командой top, выводится отсортированной по уровню используемого процессорного времени (столбец %CPU). Пользователь может изменить порядок сортировки:
- отсортировать процессы по объему занимаемой оперативной памяти (столбец %MEM) нужно нажать комбинацию клавиш Shift+M;
- отсортировать по номеру процесса (столбец PID) можно при помощи комбинации Shift+N;
- отсортировать по времени работы (столбец TIME+) — Shift+T.
- вернуться к исходной сортировке по уровню загрузки центрального процессора — нажать комбинацию Shift+P.
Использование команды ps
При помощи команды top можно получить множество необходимых сведений, однако это не самый удобный способ получения необходимой информации о нужном вам процессе. Чтобы не искать нужный процесс, можно воспользоваться командой ps и фильтровать список при помощи команды greep. Например, если нужно найти все процессы, связанные с запущенным браузером Opera, можно ввести команду ps axu | grep Mozilla.
Команда ps обладает следующими параметрами:
- a — показать процессы для всех пользователей;
- u — отобразить пользователя, который является владельцем процесса;
- x — показывают процессы, не привязанные к терминалу. Данная опция важна при поиске информации о графическом приложении.
При помощи связки команд ps и grep можно получить всю информацию, необходимую для уничтожения зависшего приложения.
Другие способы поиска процесса
Для того чтобы найти PID процесса по его имени, существует команда pidof. Формат ее использования следующий: pidof+имя программы. Например, чтобы найти все PID, относящиеся к программе Opera, нужно ввести: pidof Opera.
В некоторых случаях бывает так, что программа завершила свое выполнение, но не освободила сетевой порт. Чтобы получить сведения, в данном случае нужно ввести команду fuser: fuser -vn tcp 80. Где 80 — это номер зависшего порта. После этого можно убить процесс Linux по порту.
Завершение процесса с помощью команды kill
После того как вы узнали PID процесса и его имя, можно приступить к операции завершения ненужного приложения. Для этого используются две команды: kill — убить процесс по id в Linux и killall — завершить выполнение программы по имени.
Структура команды kill: kill SIGNAL PID. Где SIGNAL — это сигнал, который должен быть отправлен, а PID — это идентификатор процесса.
Параметр SIGNAL завершения процесса равен 9 (SIGKILL). Таким образом, чтобы в Linux убить процесс по pid нужно ввести в консоли команду: kill -9 9578. Где 9578 уникальный номер процесса.
Команда завершения процесса не единственная, которая может быть отправлена с помощью системного приложения kill. Получить список всех команд, которые могут быть отправлены команде с помощью kill, можно введя команду kill -l.
Полезно также знать другие значения, которые может принимать параметр SIGNAL. Например, для перезагрузки зависшей программы можно использовать параметр HUP. Сигнал SIGTERM не прерывает работу программы мгновенно, а дает время для корректного завершения работы, то есть приложение сохраняет данные, завершает свое выполнение, и освобождает все занятые ресурсы.
Как в Linux убить процесс по имени
Если известно имя программы, которую нужно завершить, можно воспользоваться командой killall. Например, чтобы уничтожить все процессы, относящиеся к приложению Opera нужно ввести команду: killall -9 Opera.
Правда, данная команда не всегда завершает процессы, относящиеся к уничтожаемой программе. Если после выполнения вышеуказанной команды вы введете комбинацию ps aux | grep Opera и увидите, что некоторые процессы еще выполняются, лучше всего завершить их при помощи системного приложения kill.
В некоторых случаях, чтобы в Linux убить процесс, запущенный другим пользователем, могут потребоваться права root. Тогда перед командой завершения процесса нужно ввести команду sudo.
Вот и все сведения, необходимые пользователю для управления процессами. Правда, данная тема не является простой для новичков, но освоить ее нужно, так как все действия операционной системы осуществляются с помощью процессов. Чтобы научиться управлять ими, нужно немного потренироваться.