Как убить процесс программы

Не смотря на свою стабильность, некоторые приложения в Linux иногда виснут. Иногда приложения перестают отзываться или просто работают так медленно, что корректно закрыть их не получается. Один из способов «убить», запущенное приложение в Linux, это использование таких команд, как kill или killall. Рассмотрим, как использовать эти команды, находить PID процесса и посылать сигнал SIGKILL.

Под процессом мы будем понимать запущенную в системе копию программы. Например, если вы открыли три окна калькулятора (например, gcalctool), это значит, что вы запустили три процесса.

Находим PID зависшего процесса

Каждый процесс в Linux имеет свой идентификатор, называемый PID. Перед тем, как выполнить остановку процесса, нужно определить его PID. Для этого воспользуемся командами ps и grep. Команда ps предназначена для вывода списка активных процессов в системе и информации о них. Команда grep запускается одновременно с ps (в канале) и будет выполнять поиск по результатам команды ps. Вывести список всех процессов можно, выполнив в командной строке:

Как убить процесс в «диспетчере задач» windows


ps axu

Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда grep. Например, чтобы найти информацию о процессе с именем gcalctool выполните команду:

ps axu | grep gcalctool

Команда grep выполнит поиск по результатам команды ps и на экран будут выведены только те строки, которые содержат строку (слово) gcalctool. Здесь есть одна интересная деталь, например, если у вас не запущено приложение gcalctool, то после выполнения ps axu | grep gcalctool вы получите:

$ ps axu | grep gcalctool yuriy 25587 0.0 0.0 10636 884 pts/2 S+ 10:20 0:00 grep —color=auto gcalctool

То есть мы получили сам процесс grep, так как в качестве параметра команде мы указали слово gcalctool, и grep нашел сам себя в выводе команды ps.

Если процесс gcalctool запущен, то мы получим:

Здесь нас интересует строка: «yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool». Число 25609 и есть идентификатор (PID) процесса gcalctool.

Есть еще один более простой способ узнать PID процесса — это команда pidof, которая принимает в качестве параметра название процесса и выводит его PID. Пример выполнения команды pidof:

$ pidof gcalctool 25609

«Убиваем» процесс командой kill

Когда известен PID процесса, мы можем убить его командой kill. Команда kill принимает в качестве параметра PID процесса. Например, убьем процесс с номером 25609:

kill 25609

Вообще команда kill предназначена для посылки сигнала процессу. По умолчанию, если мы не указываем какой сигнал посылать, посылается сигнал SIGTERM (от слова termination — завершение). SIGTERM указывает процессу на то, что необходимо завершиться. Каждый сигнал имеет свой номер.

SIGTERM имеет номер 15. Список всех сигналов (и их номеров), которые может послать команда kill, можно вывести, выполнив kill -l. Чтобы послать сигнал SIGKILL (он имеет номер 9) процессу 25609, выполните в командой строке:

Как убить процесс в линукс


kill -9 25609

Сигнал SIGTERM может и не остановить процесс (например, при перехвате или блокировке сигнала), SIGKILL же выполняет уничтожение процесса всегда, так как его нельзя перехватить или проигнорировать.

Убиваем процессы командой killall

Команда killall в Linux предназначена для «убийства» всех процессов, имеющих одно и то же имя. Это удобно, так как нам не нужно знать PID процесса. Например, мы хотим закрыть все процессы с именем gcalctool. Выполните в терминале:

killall gcalctool

Команда killall, также как и kill, по умолчанию шлет сигнал SIGTERM. Чтобы послать другой сигнал нужно воспользоваться опцией -s. Например:

Читайте также:
Продвинутый пользователь ПК какие программы

killall -s 9 gcalctool

Заключение

Некоторые процессы не удается остановить под обычным пользователем. Например, если процесс был запущен от имени пользователя root или от имени другого пользователя системы, то команды kill и killall нужно выполнять от имени суперпользователя, добавляя sudo (в Ubuntu):

sudo kill 123

Бывают ситуации, когда вы работаете в графическом интерфейсе (например, GNOME) и вам не удается открыть эмулятор терминала, чтобы остановить зависший процесс. Тогда можно переключиться на виртуальную консоль клавишами Ctrl+Alt+F1, залогиниться в ней и выполнять команды уже из нее. А потом перейти обратно, нажав Ctrl+Alt+F7.

Справку по использованию любой команды можно получить командой man:

man ps man grep man pidof man kill man killall
Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки

Материалы по теме:

  • Основы работы в командной строке Linux
  • kill
  • Видео: Подборка полезных утилит и команд Linux
  • Опубликовано: 12.09.2012

Смотрите также

  • Создаем говорящие часы в Linux или других Unix-подобных системах
  • Таймаут запроса пароля при выполнении sudo
  • Команда chmod в Linux
  • Забавные команды Linux. Огонь, поезд.
  • Трюк в командной строке — Возврат в предыдущую директорию
  • Включаем комбинацию Ctrl+Alt+Backspace в Ubuntu
  • Проблемы с запуском интерфейса Unity в Ubuntu 11.04, установка Unity 2D
  • Fedora 36 KDE, настройка после установки и что делать, если видеокарта у вас — Intel
  • Установка и использование PIP в Linux
  • ls
  • Gentoo
  • GNOME
  • GRUB
  • Ubuntu
  • Внешний вид
  • Игры Linux
  • Интернет и сети
  • Командная строка
  • Настройка Linux
  • Оборудование и драйвера
  • Программы Linux
  • Файловая система
  • Шрифты
  • Общие темы
  • Руководство по Ubuntu Linux для начинающих
  • Elementary OS
  • ArchLinux
  • Команды Linux

Новое в галерее

Новые комментарии

x230 17:50 14.06.2023
Minor748 17:42 14.06.2023
LuxFerre 16:18 14.06.2023
anton996 15:43 14.06.2023
savdeem 15:16 14.06.2023
Slawyan 15:01 14.06.2023
xKDE 14:51 14.06.2023
breeder 14:33 14.06.2023
aandrosov 14:07 14.06.2023
xKDE 08:40 14.06.2023

Комментарии

Активный пользователь
13.09.2012
09:10

Постоянная ссылка на комментарий

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки
спасибо, интересная статья.
Активный пользователь
03.01.2013
22:18

Постоянная ссылка на комментарий

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки

у меня в xfce есть диспетчер xfce с пидами и эрсэсэсами. я его на панель в быстрый запуск вывел. зависла прога — щелк по диспетчеру , на процесс (он там буро-красным
горит) правой кнопкой — хошь завершить, хошь убить. Блямс. и готово.
к чему такие сложности.

06.01.2013
17:28

Постоянная ссылка на комментарий Родительский комментарий USUB

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки
зато в любом unix-подобном дистрибутиве будет работать такой способ
Активный пользователь
07.01.2013
09:28

Постоянная ссылка на комментарий Родительский комментарий USUB

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки
А на сервер тоже DE ставить? Работу в командной строке в Unix-подобных ОС знать необходимо.
uselessgnome
20.09.2013
10:11

Постоянная ссылка на комментарий Родительский комментарий USUB

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки

А ты попробуй завершить процесс Xorg в своем хваленом диспетчере,когда у тебя графический интерфейс Xсервера повиснет, потом расскажешь (:

Активный пользователь
22.09.2013
21:48

Постоянная ссылка на комментарий Родительский комментарий uselessgnome

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки

Извиняй, конечно, но если все корректно поставлено, то и Xorg заврешать не придется. Кроме того, к команде предстовляется справка. И этим все сказано.

23.10.2013
20:33

Постоянная ссылка на комментарий Родительский комментарий uselessgnome

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки
ctrl+alt+backspace ни кто еще не отменял)
Активный пользователь
02.06.2014
15:19

Постоянная ссылка на комментарий Родительский комментарий Alex

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки
Отменял, если заранее не настроено.
Активный пользователь
24.10.2013
18:30

Постоянная ссылка на комментарий Родительский комментарий USUB

Войдите, чтобы ставить лайки мне нравится
войдите, чтобы ставить лайки

Во-первых, большинство графических диспетчеров задач (системных мониторов, менеджеров процессов или как там их ещё называют. ) сами кушают некоторое количество ресурсов, а в ситуации, когда какой-либо процесс «завис», этот «зависший» процесс будет тормозить всё остальное, в том числе и сам диспетчер задач. По сравнению с ним, простые консольные команды практически невесомы, и должны работать почти в любой ситуации.
Во-вторых, они дают возможность завершать процессы даже если не загружен никакой графический интерфейс. Поэтому умение работать в консоли всегда полезно.
В-третьих, знание подобных консольных команд необходимо для автоматизации и настройки системы, и в некоторых случаях их использование гораздо более удобней, чем нежили использование громоздких графических утилит. Например, если вам нужно убить какой-нибудь ПЛОХОЙ_ПРОЦЕСС, то Вы просто можете ввести команду: «killall ПЛОХОЙ_ПРОЦЕСС», а если Вам приходится убивать его часто, то Вы можете создать какой-нибудь пункт запуска с этой командой, или назначить её под какую-нибудь «горячую клавишу». Таким образом, Вы сможете убить неугодный Вам процесс всего в один клик, или одно нажатие клавиши. Согласитесь, ведь это гораздо удобнее, чем каждый раз запускать диспетчер, искать в нём неугодный процесс, завершать его, а после завершать сам диспетчер.

Читайте также:
Как заменить прицел в самп без программ

P.S. Статья очень хорошая, автору спасибо!

Источник: pingvinus.ru

Как завершить процесс в Windows

Программа в состоянии выполнения называется процессом. Аналогично, служба Windows, выполняющая фоновые программы, называется процессом Window. Когда слишком много процессов работают одновременно, это может привести к замедлению работы системы; поэтому иногда нам необходимо убить процесс. В Windows процесс можно убить, используя его уникальный PID (идентификатор процесса) или имя процесса.

В этом исследовании мы поговорим о различных методах уничтожения процесса в Windows:

  • Использование диспетчера задач
  • Использование командной строки
  • Использование Windows PowerShell

Метод 1: Убить процесс в Windows с помощью диспетчера задач

Чтобы убить процесс с помощью диспетчера задач в Windows, выполните следующие действия.

Шаг 1: Откройте диспетчер задач

Сначала найдите «Диспетчер задач» (Task Manager) в меню «Пуск» и откройте его:

Запуск диспетчера задач

Шаг 2: Завершить процесс

Откройте текущие запущенные процессы из меню «Процессы». Выберите процесс, который вы хотите завершить, затем нажмите кнопку «Снять задачу». Например, мы собираемся завершить «Putty»:

Завершить процесс Putty

Как вы можете видеть, выбранного процесса больше нет в списке, что указывает на то, что мы успешно убили его:

Процесс завершен

Давайте перейдем ко второму способу уничтожения процесса с помощью командной строки.

Метод 2: Убить процесс в Windows с помощью командной строки

Чтобы убить процесс с помощью командной строки в Windows, выполните следующие действия.

Шаг 1: Откройте командную строку

В меню «Пуск» введите «CMD» для поиска командной строки и откройте ее от имени администратора:

Запуск командной строки от имени администратор

Шаг 2: Проверьте список задач

Выполните команду «tasklist», чтобы получить список текущих запущенных процессов вместе с дополнительной информацией:

tasklist

cmd просмотр списка процессов

Шаг 3.1: Используйте имя процесса для уничтожения процесса

Чтобы убить процесс, указав имя процесса или изображения, используйте приведенную ниже команду:

taskkill /IM putty.exe /F

Шаг 3.2: Использование PID для уничтожения процесса

Вы также можете убить процесс, добавив PID (идентификатор процесса) в следующую команду «taskkill»:

taskkill /PID 6840 /F

Как убить процесс 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:

ps aux | grep ping

В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:

kill -TERM 20446

И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:

kill -KILL 20446

Теперь снова проверяем:

Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.

Как завершить процесс с помощью pkill

Утилита pkill — это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:

Также можно вручную задать тип сигнала:

pkill -TERM ping

Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:

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

Как остановить процесс с помощью killall

killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:

Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:

Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:

Выводы

В этой статье мы рассмотрели как убить процесс Linux. Иногда эта задача может быть очень полезной, но важно понимать, что ее нужно выполнять правильно. Нельзя сказать, что передача SIGKILL вместо SIGTERM очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник: losst.pro

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru