- Убиваем процессы в Linux — команды ps, kill и killall
- Находим PID зависшего процесса
- «Убиваем» процесс командой kill
- Убиваем процессы командой killall
- Заключение
- Материалы по теме:
- Смотрите также
- Новое в галерее
- Новые комментарии
- Комментарии
- Завершить все процессы линукс
- NAME
- SYNOPSIS
- DESCRIPTION
- OPTIONS
- EXAMPLES
- SEE ALSO
- STANDARDS
- AUTHOR
- REPORTING BUGS
- How to Kill all Processes for a User in Linux
- Understanding System Signals
- Method #1 – The Killall Command
- How to kill all user processes with killall
- Method #2: The Pkill Command
- Conclusion
- About the author
- John Otieno
Убиваем процессы в Linux — команды ps, kill и killall
Не смотря на свою стабильность, некоторые приложения в Linux иногда виснут. Иногда приложения перестают отзываться или просто работают так медленно, что корректно закрыть их не получается. Один из способов «убить», запущенное приложение в Linux, это использование таких команд, как kill или killall. Рассмотрим, как использовать эти команды, находить PID процесса и посылать сигнал SIGKILL.
Под процессом мы будем понимать запущенную в системе копию программы. Например, если вы открыли три окна калькулятора (например, gcalctool), это значит, что вы запустили три процесса.
Находим 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. Например:
Заключение
Некоторые процессы не удается остановить под обычным пользователем. Например, если процесс был запущен от имени пользователя 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. Статья очень хорошая, автору спасибо!
Завершить все процессы линукс
NAME
kill - send a signal to a process
SYNOPSIS
DESCRIPTION
The default signal for kill is TERM. Use -l or -L to list available signals. Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternate signals may be specified in three ways: -9, -SIGKILL or -KILL. Negative PID values may be used to choose whole process groups; see the PGID column in ps command output. A PID of -1 is special; it indicates all processes except the kill process itself and init.
OPTIONS
[. ] Send signal to every listed. - -s --signal Specify the signal to be sent. The signal can be specified by using name or number. The behavior of signals is explained in signal(7) manual page. -l, --list [signal] List signal names. This option has optional argument, which will convert signal number to signal name, or other way round. -L, --table List signal names in a nice table. NOTES Your shell (command line interpreter) may have a built-in kill command. You may need to run the command described here as /bin/kill to solve the conflict.
EXAMPLES
kill -9 -1 Kill all processes you can kill. kill -l 11 Translate number 11 into a signal name. kill -L List the available signal choices in a nice table. kill 123 543 2341 3453 Send the default signal, SIGTERM, to all those processes.
SEE ALSO
kill(2), killall(1), nice(1), pkill(1), renice(1), signal(7), skill(1)
STANDARDS
This command meets appropriate standards. The -L flag is Linux-specific.
AUTHOR
Albert Cahalan ⟨albert@users.sf.net⟩ wrote kill in 1999 to replace a bsdutils one that was not standards compliant. The util-linux one might also work correctly.
REPORTING BUGS
© 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.
How to Kill all Processes for a User in Linux
There is nothing more frustrating than logging into your Linux system only to have many processes slowing down your machine. Although Linux is very good at process management, you may need to terminate some processes manually.
In this tutorial, we shall discuss how to find and kill processes from a specific user. We will use tools such as pkill and killall.
NOTE: Ensure you have access to an administrative account or the root account because regular users can only kill their processes, not processes belonging to other users. On the other hand, the root user can kill all processes.
Understanding System Signals
To kill a specific process, the command sends a signal to the process. By default, kill commands such as killall send a TERM signal that gracefully stops the specified process.
Before we proceed to kill command, let us take a brief overview of the process signals.
The common types of kill signals include:
- SIGHUP – This signal reloads a process. It has an integer value of 1.
- SIGINT – Interrupt from the keyboard such as CTRL + C. It has an integer value of 2.
- SIGKILL – Kill a process. It has an integer value of 9.
- SIGTERM – This is a termination signal, which, as stated, gracefully stops a process. It has an integer value of 15.
- SIGSTOP – Stops a process. It has an integer value of either 17, 19, or 23.
NOTE: When terminating processes, it is good to start with the least aggressive signal, such as TERM. Using a signal such as TERM will allow the program to shut down correctly and use the set measures when the program receives the TERM signal.
A KILL signal can also be helpful, especially if a process has encountered an error, fails to exit or does not respond to the INT signal.
To view all the available signals, use a command such as a kill -l
Method #1 – The Killall Command
The first command you can use to kill Linux processes is the killall command. For this, you need the PID value or the name of the process you wish to terminate.
You can use a tool such as pgrep to get the PID of a specific process.
Once you have the PID value of the process, you can terminate using the kill command as:
The command above will send a graceful termination signal.
To send a KILL signal, use the -9 integer as:
How to kill all user processes with killall
Killall command allows you to terminate all the processes owned by a specific user. To do this, use the -u flag.
For example, to terminate all processes spawned by the ubuntu user.
CAUTION: Depending on the user specified in the command, terminating the processes can cause the system to crash or stop critical system processes. Therefore, before applying this command, ensure the user in question is not running processes you do not wish to terminate.
Method #2: The Pkill Command
Another great tool you can use to terminate Linux processes is the pkill command. This command works similarly to killall.
For example, to terminate the bash process with pkill, use the command:
To kill all processes owned by the ubuntu user, we can use the command:
Conclusion
In this guide, we quickly discussed ways to terminate processes in Linux and various types of kill signals. As seen, killing a single process or multiple processes owned by a specific Linux user is easy.
About the author
John Otieno
My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list