- Убиваем процессы в Linux
- Сигналы завершения процессов в Linux
- Как завершить процесс в Linux
- С помощью команды kill
- С помощью команды pkill
- С помощью команды killall
- How to Kill a Background Process in Linux
- 1. Overview
- 2. Before We Start
- 2.1. The kill Command
- 2.2. Background v s. Foreground
- 3. How to Actually Stop a Process
- 3.1. ps
- 3.2. pgrep
- 3.3. pkill
- 3.4. jobs
- 3.5. killall
- 4. Bonus
- 4.1. fg
- 4.2. System Monitor
- 5. Conclusion
Убиваем процессы в Linux
Рассказываем, как завершить работу одного или нескольких процессов в разных дистрибутивах Linux.
Сигналы завершения процессов в Linux
В Linux управление процессами осуществляется с помощью специальных сигналов. Каждый сигнал задает определенный набор параметров и моделей поведения для ядра и запущенных программ. Например, завершить выполнение определенных задач, удалить все временные файлы или закончить обрабатывать полученные данные. Системе Linux и запущенным процессам эти сигналы хорошо знакомы, и они умеют на них правильно реагировать. Поэтому они работают по всей системе без ограничений.
Эти сигналы обычно посылает сама система, но это может делать и администратор компьютера. Правда, перед этим ему стоит ознакомиться с тем, к каким последствиям может привести халатное отношение к командам завершения процессов.
- SIGINT — это относительно щадящий сигнал завершения работы. Его можно послать, одновременно нажав клавиши Ctrl + C. Этот сигнал разрешает процессу завершить выполнение своей работы, удалить после себя весь мусор и спокойно уйти на покой.
- SIGQUIT — этот сигнал также пытается убить процесс, предлагая ему закончить свою работу, но процесс может проигнорировать этот запрос и тут же закрыться. При этом SIGQUIT формирует некий слепой (дамп памяти) программы для восстановления данных при повторном запуске. Чтобы его послать, нужно одновременно нажать клавиши Ctrl + /.
- SIGHUP — этот сигнал отправляется автоматически, когда теряется интернет-соединение между управляющим компьютером и сервером.
- SIGTERM — сигнал, убивающий процесс, который обрабатывается программой.
- SIGKILL — убивает процесс, игнорируя зависимости, которые остаются активными.
Как завершить процесс в Linux
Как я уже рассказывал раньше, процесс можно убить, используя определенные сочетания клавиш в терминале.
Допустим, находясь в терминале, вы запустили собственный node.js сервер и хотите прекратить его работу (или же начали загрузку какого-то пакета). Эти задачи можно прервать, нажав одну из двух комбинаций клавиш:
- Ctrl + C — чтобы отправить сигнал SIGINT и завершить процесс в щадящем режиме.
- Ctrl + / — чтобы дать процессу возможность игнорировать завершение сторонних задач.
С помощью команды kill
Если нужно передать сигнал завершения процесса какой-то программе, которая работает в фоновом режиме, можно воспользоваться командной kill.
У этой команды следующая структура: сначала отправляется сама команда kill, затем указывается тип сигнала (например -TERM), а следом номер процесса, так называемый process ID.
С первыми двумя составляющими команды все понятно. kill никогда не меняется, вместо -TERM можно вписать другой сигнал, а вот PID сначала нужно отыскать.
Для этого используется команда ps aux | grep название программы.
Вот та же самая процедура, но более наглядно. В одном окне терминала запущена программа ping, и в реальном времени она посылает сигналы на сайт. Во втором окне я прописал команду ps aux | grep ping. Терминал выдал мне список процессов с таким названием. Я нашел среди них свой, он запущен под Process ID 8823.
Это наше пространство для проведения эксперимента
Теперь я могу закрыть этот процесс, введя команду kill -TERM 8823.
Номер PID указан в самом начале каждой строки
И мне даже не нужно проверять, действительно он завершился или нет. В оболочке Gnome 3 в центре уведомлений тут же появилось соответствующее сообщение.
Команда ping youtube.com завершила свою работу. Все произошло так, как нам было нужно
С помощью команды pkill
pkill — это не отдельная программа, а надстройка над kill. Разница между ними заключается в том, что для запуска первой не требуется сначала выяснять PID. Программа pkill анализирует содержимое директории proc, сравнивает введенное название программы с PID, который указан там, и затем посылает сигнал завершения работы по указанному адресу.
По описанию процесс кажется замысловатым, но по факту для конечного пользователя все выглядит просто.
- Открываем терминал.
- Вводим команду pkill, а следом за ней название процесса, который нужно убить.
- Для примера введем команду pkill ping.
В нашем примере опять будем убивать ping, только теперь без PID. Нам не пришлось искать никакие номера и анализировать их
По уведомлению видно, что команда pkill сработала
С помощью команды killall
Описанные выше методы хорошо работают, если нужно завершить один процесс. А когда перед нами условный Google Chrome, создавший по процессу на каждую вкладку, то приходится туго. Закрывать все вручную сложновато. Для этого и нужна команда killall.
У нее такой же синтаксис, как у pkill. Просто вводите команду, а следом за ней название программы, которую нужно убить.
Вот так, к примеру, можно полностью вывести из строя браузер Firefox. Он даже не успеет никаких вопрос задать
How to Kill a Background Process in Linux
The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.
To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.
Connect your cluster and start monitoring your K8s costs right away:
1. Overview
There are several ways to kill a process – also called a task – and most of them involve running commands in the terminal.
In this tutorial, we’ll focus on ways that pertain to background processes.
2. Before We Start
2.1. The kill Command
The basic command used to kill a process in Linux is kill. This command works in conjunction with the ID of the process – or PID – we want to end.
Besides the PID, we can also end processes using other identifiers, as we’ll see further down.
The kill command takes in a termination signal, which can have one of several values:
- SIGINT (2) – has the same result as pressing Ctrl+C in a terminal; it doesn’t automatically end the process
- SIGQUIT (3) – does the same thing as SIGINT, with the added benefit of producing a core dump
- SIGKILL (9) – forces termination of the process; it can’t be ignored or gracefully shut down
- SIGTERM (13) – terminates the process, but gives time to gracefully shut down
If we don’t specify a termination signal, the default SIGTERM (13) will be used.
2.2. Background v s. Foreground
Also, let’s keep in mind the difference between background and foreground processes.
A foreground process is any command or process we run directly and wait for it to complete, such as:
$ ls -l total 716 -rwxr-xr-x 1 root root 1563 oct 23 2016 espdiff -rwxr-xr-x 1 root root 117104 sep 26 2019 gnome-mahjongg -rwxr-xr-x 1 root root 125304 sep 13 2019 gnome-mines -rwxr-xr-x 1 root root 178712 sep 10 2019 gnome-sudoku -rwxr-xr-x 1 root root 302336 sep 15 2019 sol
A background process, on the other hand, is one that the shell does not wait on. To run a background process, we append “&” at the end of the process we want to start:
3. How to Actually Stop a Process
As we mentioned in the beginning, most of the time, we need the PID in conjunction with the kill command, but that is not the only way, as we’ll see.
3.1. ps
The ps command is used to list processes in Linux. Here, we’ll add -eaf to get the information we want:
$ ps -eaf UID PID PPID C STIME TTY TIME CMD baeldung-reader 3208 2578 0 14:20 ? 00:00:01 /usr/share/skypeforlinux/sky baeldung-reader 3226 2578 2 14:20 ? 00:00:06 /snap/slack/24/usr/lib/slack baeldung-reader 3230 3208 0 14:20 ? 00:00:00 /usr/share/skypeforlinux/sky baeldung-reader 3232 3230 0 14:20 ? 00:00:00 /usr/share/skypeforlinux/sky baeldung-reader 3277 3208 0 14:20 ? 00:00:00 /usr/share/skypeforlinux/sky baeldung-reader 3280 3208 0 14:20 ? 00:00:00 /usr/share/skypeforlinux/sky baeldung-reader 3325 3208 3 14:20 ? 00:00:08 /proc/self/exe --type=render baeldung-reader 3363 3226 0 14:20 ? 00:00:00 /snap/slack/24/usr/lib/slack baeldung-reader 3398 3226 0 14:20 ? 00:00:00 /snap/slack/24/usr/lib/slack baeldung-reader 3411 2578 12 14:20 ? 00:00:29 /opt/google/chrome/chrome baeldung-reader 3417 3411 0 14:20 ? 00:00:00 cat baeldung-reader 3418 3411 0 14:20 ? 00:00:00 cat baeldung-reader 3423 3226 0 14:20 ? 00:00:00 /snap/slack/24/usr/lib/slack baeldung-reader 3426 3411 0 14:20 ? 00:00:00 /opt/google/chrome/chrome -- baeldung-reader 3428 3411 0 14:20 ? 00:00:00 /opt/google/chrome/chrome -- baeldung-reader 3429 3428 0 14:20 ? 00:00:00 /opt/google/chrome/nacl_help baeldung-reader 3432 3428 0 14:20 ? 00:00:00 /opt/google/chrome/chrome -- baeldung-reader 3434 3426 0 14:20 ? 00:00:00 /opt/google/chrome/nacl_help baeldung-reader 3441 3208 0 14:20 ? 00:00:00 /usr/share/skypeforlinux/sky baeldung-reader 3456 3226 5 14:20 ? 00:00:12 /snap/slack/24/usr/lib/slack baeldung-reader 3482 3411 1 14:20 ? 00:00:03 /opt/google/chrome/chrome -- baeldung-reader 3531 3426 3 14:20 ? 00:00:09 /opt/google/chrome/chrome -- baeldung-reader 3533 3531 0 14:20 ? 00:00:00 /opt/google/chrome/chrome -- baeldung-reader 3603 3432 3 14:20 ? 00:00:07 /opt/google/chrome/chrome -- baeldung-reader 3617 3432 3 14:20 ? 00:00:08 /opt/google/chrome/chrome -- baeldung-reader 3631 3432 0 14:20 ? 00:00:01 /opt/google/chrome/chrome -- baeldung-reader 3870 3432 5 14:21 ? 00:00:11 /opt/google/chrome/chrome -- baeldung-reader 3892 3432 25 14:21 ? 00:00:57 /opt/google/chrome/chrome -- baeldung-reader 3905 2892 9 14:21 ? 00:00:22 ./jetbrains-toolbox --minimi
After running ps, we visually scan for the PID of the process we want to end, and run the kill command, passing in the PID:
3.2. pgrep
The pgrep command finds processes by name and returns the PID for each match:
$ pgrep chrome 733 3638 11679 11736 11776 11848 11850 12193 12208 12240 12275 14705 17372 18003 18378 18526 18540 18736 22401 23844 $ sudo kill -9 733
3.3. pkill
pkill is one of the commands that can directly kill a background process, using the process name.
For example, if we want to stop all instances of RabbitMQ we can use:
3.4. jobs
Another way to kill a process is by its job number. This is where the jobs command helps us.
First, let’s launch a couple of jobs:
$ sleep 100 & [1] 24827 $ sleep 200 & [2] 24832
Note that we see the job ID as well as the PID after each command.
We can use jobs to list them:
$ jobs [1]- Running sleep 100 & [2]+ Running sleep 200 &
And then we can kill by the job ID:
$ kill %1 # Here 1 is the job number. We can also kill job number 2 if we want in the same way $ jobs [1]- Terminated sleep 100 [2]+ Running sleep 200 &
3.5. killall
In contrast to kill, which uses the PID of the process, the killall command takes the name and, as implied, kills all processes with that name.
This is useful, for example, when we have a frozen web browser (like Chrome or Firefox) with multiple tabs open. We can easily kill all processes running on the browser and close it by using:
$ killall chrome $ killall firefox
4. Bonus
4.1. fg
fg is a command used to bring a background process to the foreground. Then, we can simply stop the process by using Ctrl+C:
$ sleep 100 & [1] 25994 $ jobs [1]+ Running sleep 100 & $ fg 1 sleep 100 ^C $
4.2. System Monitor
Another way to end a process is by launching the System Monitor, the Linux equivalent of the Windows Task Manager. To launch it, we run:
If we don’t have it installed on our machine, then we install it using:
$ sudo apt-get install gnome-system-monitor
In the System Monitor, we can see a list of all the processes currently running. To kill a process, we navigate through that list, right-click the process, and choose the kill option.
5. Conclusion
In this article, we learned how to kill background processes in Linux.
We can kill a process in multiple ways using various commands from the Linux ecosystem. Also, if we don’t like typing in a terminal, we can always use the System Monitor instead.