- Как убить процесс Linux
- Как происходит завершение процесса?
- Как убить процесс Linux?
- Как завершить процесс с помощью pkill
- Как остановить процесс с помощью killall
- Выводы
- Аналог диспетчера задач в Linux
- Используем консоль
- Для любителей графического интерфейса
- Добавить комментарий Отменить ответ
- Диспетчер задач в Linux — принудительно закрываем программу
- Как открыть диспетчер задач
- Закрыть программу утилитой из терминала
- Закрыть программу командой из терминала
Как убить процесс 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.
Аналог диспетчера задач в Linux
Программы имеют свойство зависать — никуда от этого не денешься, даже в Linux. Поэтому один из вопросов, через который обязательно проходит начинающий линуксоид: где в Linux диспетчер задач? Как завершить зависший процесс?
Используем консоль
Стоит сказать, что (как и в Windows, если Вы не знали) один из простейших способов завершить процесс в Linux — сделать это через консоль.
Для этого сначала придется узнать PID процесса, а затем выполнить специальную команду.
Для того, чтобы увидеть все процессы в системе введите:
Результат будет выглядеть так:
В выведенном списке процессов найдите нужный, видите его PID? Он идет вторым значением в каждой выведенной строке. Берем его, и выполняем вводим следующую команду:
Само собой, вместо букв PID надо ввести PID нужного процесса.
Вот, собственно, и все. Осталось добавить пару хитростей.
Если Вы заранее знаете, как называется процесс, можно воспользоваться командой:
ps axu | grep название-приложения
Например, если я захочу найти KTorrent (хотя он у меня ни разу не вис, просто под руку попался) я введу:
Здесь у нас и представится возможность использовать вторую хитрость — как видите, у KTorrent несколько процессов, чтобы завершить их все, я использую команду killall:
Эта команда завершит их все.
В завершении разговора о консоли осталось только порекомендовать интересующимся почитать про различные сигналы завершения процесса и их использование.
Для любителей графического интерфейса
Графические решения для просмотра и завершения процессов в Linux, конечно же, тоже существуют. Их наличие или отсутствие по-умолчанию зависит от Вашего дистрибутива. Если в Вашем дистрибутиве используется среда KDE — нажмите ctrl+escape, чтобы вызвать здешний «диспетчер задач» KRunner. В моем Linux Mint 17.2 KDE выглядит он вот так:
В Linux Mint 17.2, использующем в качестве DE Cinnamon, ничего такого «сходу» не нашлось, однако, установив пакет mate-system-monitor я обрел желаемое.
sudo apt-get install mate-system-monitor
После установки программу можно найти в меню, а выглядит она вот так:
В Ubuntu 14.04 программа System Monitor оказалась сразу включена в дистрибутив, осталось только найти ее в меню.
Ну и наконец, если в Вашем дистрибутиве ничего такого не нашлось, а орудовать в консоли не хочется, можете установить Htop. Хотя работает программа в консоли, интерфейс все-таки вполне можно назвать если не графическим, то псевдо-графическим точно:
Установить в Ubuntu-подобных дистрибутивах можно командой:
Если у Вас другой дистрибутив, сходите на сайт разработчика софтины: http://hisham.hm/htop/
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Авторский проект Александра Павлова ©. Автором всех материалов, опубликованных на сайте, является Александр Павлов . Материалы, размещенные на сайте, охраняются Законом о защите авторских прав. Публикация любых материалов этого сайта запрещена без предварительного согласования с автором.
Диспетчер задач в Linux — принудительно закрываем программу
Пользователи спрашивают — Как принудительно завершить ту или иную программу в Linux? Как правило это пользователи которые перешли с Windows или не так часто сталкиваются с linux. В Windows это возможно через диспетчер задач. В linux его нет.
Как открыть диспетчер задач
Если в Windows диспетчер задач открывается, по умолчанию, комбинацией клавиш Ctrl+Alt+Del или Ctrl+Alt+Esc, то в linux данной опции не предусмотрено.
Для того, чтоб открыть диспетчер задач в linux, вначале его надо установить.
Называется в Linux он System monitor. Установить его можно просто из стандартного репозитория, командой в терминале
sudo apt install gnome-system-monitor
или при помощи менеджера пакетов Synaptic
После установки вы найдете его в меню приложений, раздел Система
После запуска в нем вы увидите все запущенные процессы
Если выбрать нужный вам процесс и кликнуть по нему правой кнопкой мыши, откроется меню действий над процессом.
В открывшемся меню можно выбрать то, что нас интересует:
Завершить процесс, убить его совсем и так далее.
Так же на вкладке ресурсы мы увидим загруженность нашей системы
На вкладке файловые системы вы можете посмотреть всю информацию о ваших накопителях
Вот такая очень полезная маленькая программка.
Закрыть программу утилитой из терминала
Если вы привыкли работать в терминале или вам это ближе, то есть и вариант для завершения процесса, программы в терминале.
Открываем терминал и ставим маленькую утилиту htop стандартной командой
После установки набираем команду
перед вами откроется аналог диспетчера задач, только в терминале
Работать в нем еще проще, стрелочками вверх и вниз передвигаем выделение строки на нужный нам процесс.
Выбираем нажатием клавиш, что мы хотим с этим процессом сделать.
Нужные клавиши от F1 до F10 с действиями подписаны в нижней строке
Если закрываем программу, то выбираем F9
Затем нас спросят подтвердить наше действие (send) или отказаться, если передумали (Cancel). Нажимаем Enter для завершения начатого или Esc если передумали.
Закрыть программу командой из терминала
Можно закрыть программу или приложение просто командой из терминала.
Для этого нам нужно узнать идентификационный номер процесса.
Набираем команду в терминале
ps aux | grep имя_приложения
Нужный нам номер — вторая колонка.
Теперь завершаем процесс командой
sudo kill -TERM pid-приложения
Где pid — приложения — уникальный номер запущенного процесса, приложения
Если у кого есть, что добавить, оставляйте комментарии, делитесь информацией.