How to terminate process in linux

How to Kill a Process in Linux Command Line

Found a misbehaving process? Here’s how to teach a lesson to it by terminating it using various commands.

It has been an awesome day on your Linux system, and suddenly a process starts to slow down the whole computer. It is not that important, and you want to stop its execution.

If the command/process is running in the foreground, you can use the Ctrl+C terminal shortcut. However, if the process is not visible (running in the background), you can use dedicated commands to ‘kill it’.

The term «killing a process» refers to stopping a process mid execution. If you know the process ID (PID), you can use the kill command like this:

In the above syntax, signal refers to the kill signal you want to send for termination and PID refers to the ID of the process.

There is also a killall command and I’ll discuss both kill and killall commands in this article.

Before you start killing processes, you should know a few things. Such as what termination signals are available, how to find PID etc.

Let’s start with the signals first.

Termination signals in Linux

When a process is terminated by the OS or by the user i.e. the process did not finish on its own, it is sent a terminal signal.

Signal Numerical Value Description
SIGHUP 1 Signal Hangup: Sent to a process when the terminal controlling it is closed.
SIGINT 2 Signal Interrupt: The signal sent to a process when a user terminates a process. (eg Ctrl + X)
SIGKILL 9 Signal Kill: The signal that immediately quits a process, without allowing it to save its current state.
SIGTERM 15 Signal Terminate: Sent to the signal to request termination of process. This signal can be ignored by a process. But this is the preferred way of terminating a process as it can release the resources when the process receives SIGTERM.
SIGSTOP 19 (for x86, ARM and most others)
17 (for Alpha)
23 (for MIPS)
24 (for PARISC)
Signal Stop: Signal for stopping a process, but to be resumed at a later time.

It is most likely that you’ll be using signals 9 and 15. Read more about the difference between SIGKILL and SIGTERM.

Getting the PID of a process

You also need to know the details of the process you want to terminate. With kill command, you must provide the id of a process (PID). You can get the PID from the process name:

Terminating a process in the Linux command line

Let’s see the kill command first as you’ll be using it more than killall.

Using kill command

The kill command requires that you know the ID of a process that you want to kill and, optionally, the termination signal.

Читайте также:  Xml чем открыть линукс

To simply kill a command, use the following syntax:

Sending a termination signal to a PID is optional, and if no signal is provided, kill defaults to sending SIGTERM ( 15 ), ending in a graceful termination of said process.

I started a background process of sleep command (and it gave me a PID). Let’s try killing it using the kill command.

Killing this particular instance of sleep would look like the following:

$ sleep 120 & [1] 125686 $ kill 125686 [1] + terminated sleep 120

If I wanted to use a termination signal, I could either use the numerical value or the signal itself:

$ sleep 120 & [1] 125746 $ kill -SIGKILL 125746 [1] + killed sleep 120 ####----##-----#### $ sleep 120 & [1] 125759 $ kill -9 125759 [1] + killed sleep 120

Using killall command

If you do not know what the PID of a process is, or if the said process has multiple child processes, and you want to kill the child processes and the parent process at once, you can use killall command.

Similar to kill command, specifying a termination signal is optional. When no termination signal is specified, killall will send SIGTERM ( 15 ) to gracefully shut down said process.

To demonstrate the use of killall , I want to kill two running sleep commands.

$ sleep 120 & [1] 18609 $ sleep 2000 & [2] 18612 $ killall sleep [1]- Terminated sleep 120 [2]+ Terminated sleep 2000

Additionally, you can use the -e flag to find an exact match of the process name.

Using pkill command

An alternative command to kill is the pkill command. It is a «combination» of pgrep and kill command.

The killall kills all the processes that have a matching name. On the other hand, pkill uses pattern matching to match processes and kills them.

A few useful options available in pkill command as following:

  • -u : Processes owned by a particular owner
  • -x : Processes that match pattern exactly
  • -signal : Specify a termination signal (default is SIGTERM)

Assuming I have a user guest on my computer who should not have any processes running currently, and if there are, I want to terminate them. How can I do that?

$ ps aux | grep sleep guest 126061 0.0 0.0 6664 428 pts/3 S 10:14 0:00 sleep 50 $ sudo pkill -u guest

Note that I used sudo because I was dealing with processes that did not belong to my user.

With this article, you learned 3 different commands for killing a process in Linux. I feel it will be the kill command that you more than the others. Am I right?

Источник

Убиваем процессы в Linux — команды ps, kill и killall

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

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

Читайте также:  Linux домашний web сервер

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

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

Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда 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@yuriy-NIX:~$ ps axu | grep gcalctool yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool yuriy 25624 0.0 0.0 10640 884 pts/2 S+ 10:21 0:00 grep --color=auto gcalctool

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

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

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

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

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

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

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

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

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

Читайте также:  Arch linux and ubuntu

Заключение

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

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

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

man ps man grep man pidof man kill man killall

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

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

  • Gentoo
  • GNOME
  • GRUB
  • Ubuntu
  • Внешний вид
  • Игры Linux
  • Интернет и сети
  • Командная строка
  • Настройка Linux
  • Оборудование и драйвера
  • Программы Linux
  • Файловая система
  • Шрифты
  • Общие темы
  • Руководство по Ubuntu Linux для начинающих
  • Elementary OS
  • ArchLinux
  • Команды Linux

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

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

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Оцените статью
Adblock
detector