Завершить процесс в Linux — команды ps, kill и killall. Атрибуты процесса Идентификатор процесса (pid)

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

Идентификатор родительского процесса (ррid)

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

Исходный процесс в терминологии ОС UNIX называют родительским, а его клон – порожденным. Помимо собственного идентификатора, каждый процесс имеет атрибут РРID, т.е. идентификатор своего родительского процесса.

Идентификатор пользователя (uid) и эффективный идентификатор пользователя (euid)

UID – это идентификационный номер пользователя, создавшего данный процесс. Вносить изменения в процесс могут только его создатель и привилегированный пользователь. Система учета относит на счет создателя процесса все ресурсы, которые использует его процесс.

EUID– это «эффективный»UIDпроцесса. ЕUIDиспользуется для того, чтобы определить, к каким ресурсам и файлам у процесса есть право доступа. У большинства процессовUIDи ЕUID будут одинаковыми. Исключение составляют программы, у которых установлен бит смены идентификатора пользователя (см. обSUIDв разделе, посвященном установлению прав доступа на файлы и каталоги).

Идентификатор группы (gid) и эффективный идентификатор группы (egid)

GID– это идентификационный номер группы данного процесса. Допустимые идентификаторы групп указываются в файле/ etc / group и в поле GID файлаtc / passwd . Когда процесс запускается, егоGIDустанавливается равнымGIDродительского процесса.

EGIDсвязан сGIDтак же, как ЕUIDсUID. Если процесс попытается обратиться к файлу, на который не имеет прав владельца, ядро автоматически проверит, можно ли предоставлять разрешение на основании данного ЕEGID.

В некоторых системах процесс одновременно может относиться к нескольким группам. В этом случае EGIDпредставляет собой просто список идентификаторов групп. Если пользователь попытается получить доступ к какому-либо ресурсу, весь список проверяется на предмет того, принадлежит ли пользователь к группе, членам которой разрешается использовать данный ресурс.

Приоритет и значениеnice

От приоритета процесса зависит, какую часть времени центрального процессора он получит. Выбирая процесс для выполнения, ядро находит процесс с самым высоким «внутренним приоритетом».

Непосредственно установить внутренний приоритет невозможно, но можно установить так называемое значение nice, которое существенно влияет на внутренний приоритет. Кроме того, внутренний приоритет зависит от того, сколько времени центрального процессора уже использовал процесс и от времени ожидания своей очереди на выполнение.

Жизненный цикл процесса

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

Для создания нового процесса существующий процесс копирует самого себя с помощью системного вызова fork. Вызовforkсоздает копию исходного процесса, идентичную родителю, но имеющую следующие отличия:

    у нового процесса свой PID;

    PPIDнового процесса равенPIDродителя;

    учетная информация нового процесса обнулена;

    у нового процесса имеется свой собственный экземпляр дескрипторов файлов.

Когда система загружается, ядро самостоятельно создает несколько процессов. Наиболее важный из них – процесс (демон) init ,PIDкоторого всегда равен 1. Этот процесс отвечает за вызовshellдля выполнения сценариев запускаrc , если Ваша система их использует. Все процессы, кроме тех, которые создает ядро, являются потомкамиinit .

После обработки файлов запуска процесс init запускает для каждого виртуального терминала процессgetty .

Процесс init играет важную роль и в управлении процессами. Когда процесс завершается, он вызывает подпрограмму_ exit , чтобы уведомить ядро о своей готовности «умереть». В качестве параметра подпрограмме_ exit передаетсякод завершения – целое число, указывающее на причину завершения процесса. По соглашению нулевой код завершения означает, что процесс был «успешным».

Код завершения необходим родительскому процессу, поэтому ядро должно хранить его, пока родительский процесс не запросит его системным вызовом wait . Дело в том, что когда процесс завершается, его адресное пространство освобождается, время центрального процессора этому процессу не выделяется, однако в таблице процессов ядра запись о нем сохраняется. Процесс в этом состоянии называют «зомби».

Этот механизм работает нормально, если родительский процесс завершается позже порожденных им процессов и добросовестно вызывает wait для того, чтобы все процессы - зомби умерли. Если же родительский процесс умирает первым, то ядро понимает, что вызоваwait не последует, и дарит всех зомби процессуinit . Процессinit обязан принять этих «осиротевших» зомби и выполнить вызовwait , необходимый для того, чтобы ликвидировать их. Иногдаinit не выполняет свои обязанности как следует, и зомби остаются в системе. Но каких-либо проблем при этом они не создают.

М ы покажем вам, как убить процесс в Linux. Одним из главных преимуществ Linux, является возможность завершить процесс без необходимости перезагрузки сервера. В этой статье мы покажем вам, как убить процесс в Linux с помощью команды kill, pkill и killall.

1. Что такое PID

Прежде чем мы начнем, мы должны знать, что такое ID процесса (PID).

PID представляет собой цифровую идентификацию процесса в . Каждый процесс имеет уникальный PID. В самом деле, например, первый процесс, который начинается в системе на базе Linux, это процесс, и его PID устанавливается в 1. Этот процесс является родителем всех остальных процессов. Процесс инициализации не может быть убит с помощью команд kill, и это гарантирует, что это не будет случайно убит.

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

Это дает нам список всех запущенных процессов и их соответствующие PIDы.

Если мы хотим найти PID определенного процесса, мы можем использовать команду pidof с последующим именем процесса. Например, чтобы узнать PID нашего процесса MySQL, можно выполнить следующую команду:

Pidof mysql

Для еще более подробной информации, мы можем использовать команду ps aux вместе с grep :

Ps aux | grep mysql

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

2. Убить процесс с помощью команды kill в Linux

Есть несколько важных правил, которые мы должны знать, прежде чем начать использовать команду kill.

  • Вы можете убить только собственные процессы, которые принадлежат вашему идентификатору пользователя
  • Вы не можете убивать процессы других пользователей
  • Вы не можете убить системные процессы (если вы не суперпользователь)
  • Пользователь root может убить процесс любого другого пользователя и любой системный процесс

Когда мы убиваем процесс с командой kill, мы на самом деле отправляем конкретный сигнал PID-регулятор, который мы хотим убить. Следующие сигналы используются командой kill:

1 = Hung up 9 = Kill 15 = Terminate

Сигнал hung up используется редко. Чаще всего мы используем сигнал kill, и если он не работает, то мы можем использовать сигнал Terminate.

Поэтому, как только мы находим PID процесса, который мы хотим убить, используйте один из методов, описанных нами ранее, мы можем использовать команду kill -9 PID , чтобы убить процесс с этого конкретного PID.

Например, если PID равный 6738, то мы можем использовать следующую команду:

Kill -9 6738

3. Убить процесс с помощью команды pkill в Linux

Если вы хотите использовать имя процесса вместо его PID, чтобы убить его, то вы можете использовать команду pkill. Например, если процесс, который мы хотим убить называется , то мы можем использовать следующую команду, чтобы убить его:

Pkill mysql

4. Убить процесс с помощью команды killall в Linux

Две предыдущие команды используются, чтобы убить только один конкретный процесс. Но, если мы хотим убить процесс вместе со всеми его дочерними процессами мы можем использовать команду killall :

Killall mysql

В этом примере мы убьем процесс MySQL и все его дочерние процессы.

Они являются наиболее распространенными примерами убийства процесса в Linux.

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

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

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

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

Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда 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@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:

$ 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

Операционная система UNIX Робачевский Андрей М.

Идентификатор процесса Process ID (PID)

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

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА Начальное обращение к файлу производится по его составному имени (имени пути поиска), как в командах open, chdir (изменить каталог) или link. Поскольку внутри системы ядро работает с индексами, а не с

Из книги Редкая профессия автора Зуев Евгений

Что такое идентификатор? Помимо неоднозначностей в синтаксисе быстро обнаружились другие неприятности. На примерах их показать сложнее, так что придется рассказывать словами.Синтаксис языка Си++ неудобен еще и в другом отношении. Если говорить коротко, то прямое

Из книги Программирование автора Козлова Ирина Сергеевна

11. Идентификатор. Ключевые слова Идентификатором называется последовательность цифр, букв и специальных символов. При этом первой стоит буква или специальный символ. Для получения идентификаторов можно использовать строчные или прописные буквы латинского алфавита.

Из книги 200 лучших программ для Интернета. Популярный самоучитель автора Краинский И

Process Guardian ХР Производитель: T.A.S. Independent Programming (http://www.tas-independent-programming.com).Статус: бесплатная.Ссылка для скачивания: http://www.tas-independent-programming.com/cgi-bin/countdown.pl?Guardian.exe.Размер: 2,4 Мбайт.Главное предназначение этой утилиты – управлять запущенными на компьютере процессами.После

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Идентификатор открытого файла В состав класса CFile входит элемент данных m_hFile типа UINT. В нем хранится идентификатор открытого файла. Если вы создали объект класса CFile, но еще не открыли никакого файла, то в m_hFile записана константа hFileNull.Обычно нет необходимости

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Идентификатор транзакций Другая часть стратегии тайм-аутов и повторных передач заключается в использовании идентификаторов транзакций (transaction ID или XID) для распознавания запросов клиента и ответов сервера. Когда клиент вызывает функцию RPC, библиотека присваивает этому

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

16.7 Временная метка и идентификатор сообщения При получении почты интересно узнать время ее отправления и получения. SMTP добавляет эту информацию к пересылаемому сообщению. Кроме того, этот протокол отслеживает все хосты, которые передавали почтовое сообщение, и время

Из книги Adobe Audition 3 учебник автора Автор неизвестен

Dynamic EQ (process) Эффект Dynamic EQ варьирует количество фильтрации со временем. Например, в первой половине волны вы можете поднять высокие частоты, а во второй - изменить ширину затрагиваемой полосы частот. Окно Dynamic EQ имеет три вкладки: Gain, Frequency, и Q (bandwidth). 1. Frequency graph (график

Из книги Справочник по PHP автора

Pan/Expander (process) Эффект Pan/Expand позволяет переместить центральный канал (моно составляющую) из стерео сигнала, а также расширить или сузить стерео разделение левого и правого каналов.Центральный канал панорамируется используя центральный и окружающие каналы стерео записи,

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Stretch (process) Эффект Stretch позволяет изменять высоту тона (питч) звукового сигнала, темп или то и другое. Например, вы можете использовать этот эффект, чтобы увеличить высоту тона фонограммы без изменения ее длительности, или же наоборот изменить длительность не изменяя

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Идентификатор сессии Итак, идентификатор сессии является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Один SID - одно хранилище. Нет SID, нет и хранилища, и наоборот.Так как же соотносится идентификатор и имя

Из книги Операционная система UNIX автора Робачевский Андрей М.

10.2.1. Идентификатор процесса и происхождение Два из наиболее фундаментальных атрибутов - это идентификатор процесса (process ID), или pid, а также идентификатор его родительского процесса. Идентификатор pid - это положительное целое число, которое уникально идентифицирует

Из книги автора

10.2.3. Идентификатор uid файловой системы В очень специальных случаях программе может понадобиться сохранять свои права root для всего, кроме доступа к файловой системе, при котором она использует пользовательский uid. Изначально использовавшийся в Linux NFS-сервер пространства

Из книги автора

Идентификатор домена При создании в базе данных домена вы должны задать идентификатор домена, который является глобально уникальным в базе данных. Разработчики часто используют префикс или суффикс в идентификаторах доменов для улучшения документирования. Например:CREATE

Из книги автора

Из книги автора

Идентификатор родительского процесса Parent Process ID (PPID) Идентификатор процесса, породившего данный