26-10-2018 11:39

Linux: как убить процесс с помощью терминальных команд

Представьте себе: вы запустили программу, работаете с ней, а через время она перестает отвечать на запросы и виснет. Запустить повторно приложение невозможно из-за того, что ее экземпляр еще висит в памяти компьютера. Что делать в таком случае? В первую очередь нужно завершить работу программы и удалить процесс из памяти.

Наиболее простой и универсальный способ убить процесс в Linux — это использование терминальных команд. Данный вариант будет работать на любом дистрибутиве Linux.

Процессы в Linux

How dangerous is the new coronavirus?You will be interested:How dangerous is the new coronavirus?

В операционной системе Linux процессом обычно называют запущенную программу или приложение. Также процессом можно называть любую задачу, которая работает в данный момент под управлением Linux. Любой работающий процесс может запустить дочерний.

Все процессы, работающие в Linux, имеют такие атрибуты:

  • PID — уникальный для каждого процесса идентификатор.
  • PPID — идентификатор родительского процесса.
  • Идентификатор пользователя, запустившего процесс.
  • Приоритет.
  • Состояние процесса.
  • Каждый запущенный процесс находится в одном из состояний:

    • "Выполняется". Для обозначения этого состояния используется буква 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.

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



    Источник