- Команда Pkill в Linux
- Как использовать команду pkill
- Выводы
- How to Kill a Process in Linux? Commands to Terminate
- What Processes Can You Kill in Linux?
- Step 1: View Running Linux Processes
- Step 2: Locate the Process to Kill
- Locate a Process with ps Command
- Finding the PID with pgrep or pidof
- Step 3: Use Kill Command Options to Terminate a Process
- killall Command
- pkill Command
- kill Command
- kill -9 Linux Command
- top Command
- xkill command
- Key Takeaways on Terminating a Linux Process
- Как убить процесс Linux
- Как происходит завершение процесса?
- Как убить процесс Linux?
- Как завершить процесс с помощью pkill
- Как остановить процесс с помощью killall
- Выводы
Команда Pkill в Linux
В этой статье рассматриваются основы команды Linux pkill .
pkill — это утилита командной строки, которая отправляет сигналы процессам выполняющейся программы на основе заданных критериев. Процессы могут быть указаны их полными или частичными именами, пользователем, запускающим процесс, или другими атрибутами.
Команда pkill является частью пакета procps (или procps-ng ), который предварительно установлен почти во всех дистрибутивах Linux. pkill — это pkill оболочка программы pgrep которая выводит только список подходящих процессов.
Как использовать команду pkill
Синтаксис команды pkill следующий:
указывается с использованием расширенных регулярных выражений.
При вызове без какой-либо опции pkill отправляет сигнал 15 ( TERM ) идентификаторам PID всех запущенных программ, которые соответствуют заданному имени. Например, чтобы корректно остановить все процессы firefox, вы должны запустить:
Команда возвращает 0 если хотя бы один запущенный процесс совпадает с запрошенным именем. В противном случае код выхода — 1 . Это может быть полезно при написании сценариев оболочки.
Чтобы отправить другой сигнал согласованным процессам, вызовите команду pkill с параметром —signal , за которым следует числовое или символьное имя сигнала. Другой способ отправить сигнал — запустить pkill за которым следует имя сигнала или номер с префиксом дефиса ( — ).
Используйте команду kill -l чтобы kill -l список всех доступных сигналов.
Наиболее часто используемые сигналы:
- 1 ( HUP ): перезагрузить процесс.
- 9 ( KILL ): убить процесс.
- 15 ( TERM ): корректно остановить процесс.
Сигналы можно указать тремя разными способами:
- используя число (например, -1)
- с префиксом «SIG» (например, -SIGHUP)
- без префикса «SIG» (например, -HUP).
Например, чтобы перезагрузить процессы Nginx, вы должны запустить:
pkill использует регулярные выражения для сопоставления имен процессов. Всегда рекомендуется использовать команду pgrep для печати согласованных процессов перед отправкой им сигналов. Например, чтобы перечислить все процессы, которые содержат «ssh» в своих именах:
Если вы хотите отправить сигнал только тем процессам, имена которых точно соответствуют шаблону поиска, вы должны использовать:
По умолчанию pkill сопоставляется только с именем процесса. Когда используется опция -f , команда сопоставляется с полными списками аргументов. Если команда содержит пробелы, заключите всю команду в кавычки:
Используйте параметр -u чтобы указать pkill на соответствие процессам, запускаемым данным пользователем:
Чтобы указать нескольких пользователей, разделите их имена запятыми:
Вы также можете комбинировать параметры и шаблоны поиска. Например, чтобы отправить сигнал KILL всем процессам, которые запускаются под пользователем «mark» и содержат в своих именах «gnome», вы должны ввести:
Чтобы отображать только самые последние (самые старые) или самые последние (самые новые) запущенные процессы, используйте параметр -n (для самых новых) или -o (для самых старых).
Например, чтобы убить последний созданный экран :
Выводы
Команда pkill используется для отправки сигналов запущенным программам на основе различных критериев.
Для получения дополнительной информации о команде pkill посетите страницу руководства pkill или введите man pkill в своем терминале.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
How to Kill a Process in Linux? Commands to Terminate
Home » SysAdmin » How to Kill a Process in Linux? Commands to Terminate
If a Linux process becomes unresponsive or is consuming too many resources, you may need to kill it.
Most processes have their own methods of shutting down. Unfortunately, processes can malfunction and not allow themselves to be shut down. If a running background process is unresponsive, it becomes necessary to use a command to kill it.
Here’s a complete guide on how to kill a Linux process using the command line.
What Processes Can You Kill in Linux?
Before killing or terminating a process, you need to consider permissions.
A root user can kill all processes. You can either add sudo before a command to run it as root, or obtain a root shell with su . Then execute the command.
Killing a process sends a termination message to the given process. There are multiple types of termination messages including:
- SIGKILL – SIGKILL is the ultimate way of killing a process. It will always kill a process and will kill the process abruptly, generating a fatal error. SIGKILL should always work. If it does not work, the operating system has failed.
- SIGTERM – SIGTERM attempts to kill a process, but unlike SIGKILL it may be blocked or otherwise handled. It can be considered a gentler way of attempting to terminate a process.
For most purposes, SIGKILL will be the fastest and most effective method to terminate the process.
Step 1: View Running Linux Processes
The top command is the easiest way to get a complete overview of the processes currently being run.
To view a list of all currently running processes, use the command:
The top command will reveal process IDs and users, in addition to the amount of memory and CPU power each process is using.
To kill processes directly from the top interface, press k and enter the process ID.
To exit the top interface, press q.
Step 2: Locate the Process to Kill
Before you can kill a process, you need to find it. There are multiple ways you can search for a process in Linux. Processes can either be located by a process name (or a partial process name) or a process ID (also known as a “pid”).
Locate a Process with ps Command
The ps command displays similar information to top , though it will not be in the form of an interface. Instead, the ps command provides a complete listing of running processes, formatted based on the tags you add.
The most common options to add to this is “-aux”:
- -a . View processes of all users rather than just the current user.
- -u . Provide detailed information about each of the processes
- -x . Include processes that are controlled not by users but by daemons.
For example, the command ps -aux will return a detailed process list of all processes.
Finding the PID with pgrep or pidof
The Linux command pgrep is a more complex way of finding a process. This command will return processes based on specific selection criteria, which is known as the pattern. The pattern is a regular expression, such as a* , where * would be a wildcard.
Here are the options that can be used with this command:
- -l . List both the process names and the PIDs.
- -n . Return the process that is newest.
- -o . Return the process that is oldest.
- -u . Only find processes that belong to a specific user.
- -x . Only find processes that exactly match the given pattern.
The command pgrep -u root displays all processes owned by root. The command pgrep -u root ‘a*’ returns processes owned by root that start with the letter “a”.
The pidof command is used to find the ID of a process, provided that you know the name of the process.
A few options can be included, such as:
- -c . Only return PIDs within a single root directory.
- -o . Omit certain PIDs (include the processes to omit after the flag).
- -s . Only return a single PID.
- -x . Also returns PIDs of shells that are running scripts.
Step 3: Use Kill Command Options to Terminate a Process
There are a few different methods of killing a process in Linux, depending on whether you know the name of the process running, the pid of the process, or just how long the process has been running.
killall Command
The killall command is used to kill processes by name. By default, it will send a SIGTERM signal. The killall command can kill multiple processes with a single command.
Several options can be used with the killall command:
- -e . Find an exact match for the process name.
- -I . Ignore case when trying to find the process name.
- -i . Ask for additional confirmation when killing the process.
- -u . Only kill processes owned by a specific user.
- -v . Report back on whether the process has been successfully killed.
In addition to killing processes based on name, the killall command can also be used to kill based on the age of the process, using the following commands:
- -o . Use this flag with a duration to kill all processes that have been running more than that amount of time.
- -y . Use this flag with a duration to kill all processes that have been running less than that amount of time.
The killall -o 15m command will kill all processes that are older than 15 minutes, while the killall -y 15m command will kill all processes that are less than 15 minutes.
pkill Command
The pkill command is similar to the pgrep command, in that it will kill a process based on the process name, in addition to other qualifying factors. By default, pkill will send the SIGTERM signal.
pkill options include:
- -n . Only kill the newest of the processes that are discovered.
- -o . Only kill the oldest of the processes that are discovered.
- -u . Only kill the processes that are owned by the selected user.
- -x . Only kill the processes that match the pattern exactly.
- -signal . Send a specific signal to the process, rather than SIGTERM.
kill Command
If you know a process ID, you can kill it with the command:
The kill command will kill a single process at a time with the given process ID. It will send a SIGTERM signal indicating to a process to stop. It waits for the program to run its shutdown routine.
The -signal command can be used to specify a signal that isn’t SIGTERM.
kill -9 Linux Command
kill -9 is a useful command when you need to shut down an unresponsive service. Run it similarly as a regular kill command:
The kill -9 command sends a SIGKILL signal indicating to a service to shut down immediately. An unresponsive program will ignore a kill command, but it will shut down whenever a kill -9 command is issued. Use this command with caution. It bypasses the standard shutdown routine so any unsaved data will be lost.
Your operating system is not running properly if a SIGKILL signal does not shut down a service.
top Command
The top command provides an interface through which a user can navigate through currently running processes.
To kill a specific process, insert k from the top interface and then enter in the desired process ID.
xkill command
The xkill command is a special type of command that closes a given server’s connection to clients.
If a server has opened a number of unwanted processes, xkill will abort these processes.
If xkill is run without specifying a resource, then an interface will open up that lets the user select a window to close.
Key Takeaways on Terminating a Linux Process
- When a process cannot be closed any other way, it can be manually killed via command line.
- To kill a process in Linux, you must first find the process. You can use the top , ps , pidof or pgrep commands.
- Once you have found the process you want to kill, you can kill it with the killall , pkill , kill , xkill or top commands.
- When killing a process, you can send a termination signal of SIGHUP, SIGKILL, or SIGTERM.
- You need to have permission to kill a process, which you can gain through the use of the sudo command.
In this article, we covered several ways to kill processes in Linux. It is critical to learn and understand these Linux termination commands for system management and administration.
Источник
Как убить процесс 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 очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.
Источник