Что такое идентификатор процесса linux

Содержание
  1. Администрирование систем Linux. Вводная информация об управлении процессами
  2. Часть I. Управление процессами
  3. Глава 1. Вводная информация об управлении процессами
  4. 1.1. Терминология
  5. 1.2. Базовые приемы управления процессами
  6. 1.3. Отправка сигналов процессам
  7. 1.4. Практическое задание: вводная информация об управлении процессами
  8. 1.5. Корректная процедура выполнения практического задания: вводная информация об управлении процессами
  9. 9 самых простых способов узнать идентификатор процесса (PID) в Linux
  10. Что такое идентификатор процесса PID?
  11. Метод-1: Использование команды pidof
  12. Способ-2: Использование команды pgrep
  13. Метод-3: Использование команды pstree
  14. Метод-4: Использование команды ps
  15. Метод-5: Использование команды ss
  16. Метод-6: Использование команды netstat
  17. Метод-7: использование команды lsof
  18. Метод-8: Использование команды fuser
  19. Метод-9: Использование команды systemctl

Администрирование систем Linux. Вводная информация об управлении процессами

Часть I. Управление процессами

Глава 1. Вводная информация об управлении процессами

1.1. Терминология

Процесс является скомпилированным исходным кодом, исполняющимся в текущее время в системе.

1.1.2. Идентификатор процесса PID

Каждый из процессов имеет идентификатор или PID (сокращение process id ).

1.1.3. Идентификатор родительского процесса PPID

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

1.1.4. Процесс init

Процесс init всегда имеет идентификатор PID, равный 1. Процесс init запускается средствами ядра операционной системы и, следовательно, не имеет родительского процесса. Процесс init исполняет обязанности приемного родителя для осиротевших процессов.

1.1.5. Уничтожение процесса

Завершение работы процесса чаще всего достигается благодаря его уничтожению, поэтому в том случае, если вы хотите остановить исполнение процесса, вы должны уничтожить его.

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

Уничтоженный процесс, информация о котором сохраняется в рамках системы, называется зомби-процессом . Вы не можете уничтожить зомби-процессы, так как они уже были уничтожены ранее и не исполняются.

1.2. Базовые приемы управления процессами

1.2.1. Переменные командной оболочки $$ и $PPID

Некоторые переменные командной оболочки содержат информацию о процессах. Переменная $$ будет хранить идентификатор используемого вами в данный момент процесса командной оболочки, а переменная $PPID — идентификатор соответствующего родительского процесса . На самом деле $$ является параметром командной оболочки, а не переменной, так как вы не можете установить значение этого параметра.

Ниже приведен пример использования утилиты echo для вывода значений $$ и $PPID .

1.2.2. Утилита pidof

Вы можете получить все идентификаторы процессов на основе известного имени процесса, воспользовавшись утилитой pidof .

1.2.3. Родительские и дочерние процессы

Иерархия процессов системы строится на отношении родительский процесс — дочерний процесс . Каждый процесс в системе имеет родительский процесс.

При запуске нового экземпляра командной оболочки bash вы можете воспользоваться утилитой echo , чтобы убедиться в том, что идентификатор процесса предыдущего экземпляра командной оболочки совпадает с идентификатором родительского процесса нового экземпляра командной оболочки. Таким образом, используемый ранее дочерний процесс в данном случае становится родительским процессом .

Ввод команды exit приведет к завершению исполнения текущего процесса и возврату в командную оболочку с оригинальными значениями $$ и $PPID .

1.2.4. Системные вызовы fork и exec

Процесс инициирует исполнение другого процесса в два этапа. На первом этапе он создает свою точную копию с помощью системного вызова fork . После этого в рамках копии процесса выполняется системный вызов exec , предназначенный для замены скопированных данных родительского процесса на данные дочернего процесса.

1.2.5. Команда exec

Благодаря команде exec вы можете инициировать исполнение нового процесса, минуя этап создания точной копии текущего процесса. В следующем примере осуществляется запуск командной оболочки Korn Shell (ksh) с последующей заменой на командную оболочку bash с помощью команды exec . Идентификатор процесса командной оболочки bash остается равным идентификатору процесса командной оболочки Korn Shell . При этом после завершения работы с дочерней командной оболочкой bash происходит перемещение в родительскую командную оболочку bash , а не в командную оболочку Korn shell (процесса которой более не существует).

Читайте также:  Переполнена память компьютера что делать windows

Одним из наиболее часто используемых инструментов для ознакомления со списком процессов в Linux является утилита ps . В следующем примере показаны отношения между тремя родительскими и дочерними процессами bash.

В Linux обычно используется команда ps fax . В Solaris же чаще всего используется команда ps -ef (которая также работает в Linux). Ниже приведен фрагмент вывода команды ps fax .

1.2.7. Утилита pgrep

По аналогии с командой ps -C , вы также можете использовать утилиту pgrep для поиска информации о процессе по его имени.

Кроме того, вы можете осуществлять вывод списка найденных идентификаторов процессов с соответствующими им именами процессов.

1.2.8. Утилита top

Другим популярным инструментом для получения информации о процессах в Linux является утилита top . Утилита top может упорядочивать список процессов в соответствии с создаваемой ими нагрузкой на центральный процессор , а также с другими параметрами. Кроме того, вы можете уничтожать процессы средствами утилиты top. Нажмите клавишу h в процессе работы с утилитой top для ознакомления со справочной информацией.

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

1.3. Отправка сигналов процессам

1.3.1. Утилита kill

Утилита kill позволяет уничтожить процесс (или остановить его исполнение). В примере ниже показана стандартная методика использования утилиты kill для остановки исполнения процесса с идентификатором 1942.

На самом деле в процессе использования утилиты kill осуществляется передача сигнала процессу.

1.3.2. Список сигналов

Исполняющиеся процессы могут принимать сигналы от других процессов, а также от пользователей. Вы можете получить список сигналов, воспользовавшись командой kill -l , причем в качестве параметра должна использоваться строчная буква l , а не число 1.

1.3.3. Команда kill -1 (SIGHUP)

Первый сигнал SIGHUP (или HUP, или 1) часто используется в Linux для сообщения процессу о необходимости повторного чтения файла конфигурации. Таким образом, команда kill -1 1 приведет к принудительному повторному чтению файла конфигурации процессом init (процесс init всегда имеет идентификатор 1 ).

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

1.3.4. Команда kill -15 (SIGTERM)

Сигнал SIGTERM также часто называется стандартным сигналом уничтожения процесса . При использовании утилиты kill без указания сигнала предполагается, что исполняется команда kill -s 15 .

Команды в примере ниже являются идентичными.

1.3.5. Команда kill -9 (SIGKILL)

Сигнал SIGKILL отличается от большинства сигналов тем, что он отправляется не процессу, а непосредственно ядру Linux . Команда kill -9 также называется надежной командной уничтожения процесса . Ядро операционной системы гарантированно завершит исполнение указанного процесса. Как разработчик вы не можете ни коим образом перехватить сигнал, генерируемый в результате исполнения команды kill -9 .

1.3.6. Сигналы SIGSTOP и SIGCONT

Исполнение процесса может быть приостановлено в случае приема сигнала SIGSTOP . Данный сигнал может быть отправлен процессу с помощью команды kill -19 в Linux, причем в других системах Unix номер сигнала может отличаться.

Приостановленный процесс не использует циклов центрального процессора , но находится в памяти и может быть реанимирован с помощью сигнала SIGCONT (отправляемого с помощью команды kill -18 в Linux).

Оба этих сигнала будут использоваться в главе, посвященной описанию процессов, исполняющихся в фоновом режиме .

1.3.7. Утилита pkill

Вы можете использовать утилиту pkill для завершения работы процесса на основе его имени.

1.3.8. Утилита killall

Утилита killall позволяет отправлять сигнал 15 всем процессам с определенным именем.

Читайте также:  Подключение принтера по локальной сети astra linux

1.3.9. Утилита killall5

Аналог описанной выше утилиты из мира SysV, утилита killall5 , может использоваться в процессе завершения работы системы. В данном примере показано, как утилита killall5 используется в дистрибутиве Red Hat Enterprise Linux 5.3 для уничтожения процессов при завершении работы системы.

1.3.10. Утилита top

При работе с утилитой top кнопка k позволит вам выбрать сигнал и идентификатор процесса , которому этот сигнал будет отправлен. В примере ниже приведена строка, выводимая под строками с общей информацией о состоянии системы после нажатия клавиши k .

1.4. Практическое задание: вводная информация об управлении процессами

1. Используйте утилиту ps для поиска информации о процессе с именем init .

2. Каков идентификатор процесса с именем init ?

3. Используйте команду who i am для установления имени пользователя, под которым вы работаете с терминалом.

4. Располагая полученной ранее информацией о вашем имени пользователя, примените утилиту ps для поиска всех процессов, запущенных с помощью вашего терминала.

5. Каков идентификатор процесса вашей командной оболочки?

6. Каков идентификатор родительского процесса вашей командной оболочки?

7. Запустите в фоновом режиме два экземпляра процесса с помощью команд sleep 3342 .

8. Определите идентификаторы всех процессов с именем sleep .

9. Выведите информацию только о двух запущенных ранее процессах sleep с помощью утилиты top. После этого завершите работу утилиты top .

10. Используйте стандартный сигнал уничтожения процесса для уничтожения одного из двух созданных ранее процессов с именами sleep .

11. Используйте одну команду для уничтожения всех процессов с именем sleep .

1.5. Корректная процедура выполнения практического задания: вводная информация об управлении процессами

1. Используйте утилиту ps для поиска информации о процессе с именем init .

2. Каков идентификатор процесса с именем init ?

3. Используйте команду who i am для установления имени пользователя, под которым вы работаете с терминалом.

4. Располагая полученной ранее информацией о вашем имени пользователя, примените утилиту ps для поиска всех процессов, запущенных с помощью вашего терминала.

или может быть использована аналогичная команда

5. Каков идентификатор процесса вашей командной оболочки?

2973 в примере выше, в вашем случае наверняка будет использоваться отличный идентификатор процесса

Команда echo $$ позволит получить аналогичное найденному значение

6. Каков идентификатор родительского процесса вашей командной оболочки?

2972 в примере выше, в вашем случае наверняка будет использоваться отличный идентификатор родительского процесса

В данном примере родительским процессом является процесс su — , в то время, как при работе в окружении рабочего стола gnome родительским процессом может оказаться процесс gnome-terminal

7. Запустите в фоновом режиме с помощью команд sleep 3342 два экземпляра процесса.

8. Определите идентификаторы всех процессов с именем sleep .

9. Выведите информацию только о двух запущенных ранее процессах sleep с помощью утилиты top . После этого завершите работу утилиты top.

top -p pidx,pidy (замените pidx, pidy на действительные значения идентификаторов процессов)

10. Используйте стандартный сигнал уничтожения процесса для уничтожения одного из двух созданных ранее процессов с именами sleep .

11. Используйте одну команду для уничтожения всех процессов с именем sleep .

Источник

9 самых простых способов узнать идентификатор процесса (PID) в Linux

В основном, мы смотрим PID, чтобы убить невосприимчивую программу, и она похожа на диспетчер задач Windows.

Linux GUI также предлагает ту же функцию, но CLI – эффективный способ выполнения операции kill.

Что такое идентификатор процесса PID?

PID обозначает идентификационный номер процесса, который обычно используется большинством ядер операционной системы, таких как Linux, Unix, macOS и Windows.

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

Процесс – это исполняемый экземпляр программы.

PID для запущенных процессов в системе можно найти с помощью следующих девяти методов, таких как команда pidof, команда pgrep, команда ps, команда pstree, команда ss, команда netstat, команда lsof, команда fuser и команда systemctl.

  • pidof: pidof – найти идентификатор процесса запущенной программы.
  • pgrep: pgre – поиск или обработка сигналов на основе имени и других атрибутов.
  • ps: ps – сообщает моментальный снимок текущих процессов.
  • pstree: pstree – отображает дерево процессов.
  • ss: ss используется для вывода статистики сокетов.
  • netstat: netstat отображает список открытых сокетов.
  • lsof: lsof – список открытых файлов.
  • fuser: идентификаторы процессов в списке терминов всех процессов, которые открывают один или несколько файлов
  • systemctl: systemctl – Управление системой systemd и менеджером сервисов
Читайте также:  Windows system32 sfc scannow

В этом уроке мы рассмотрим идентификатор процесса Apache для проверки.

Метод-1: Использование команды pidof

pidof используется для поиска идентификатора процесса запущенной программы.

Он выводит эти идентификаторы на стандартный вывод.

Чтобы продемонстрировать это, мы узнаем идентификатор процесса Apache2 из системы Debian 9.

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

Следовательно, нам нужно выяснить родительский PID (PPID), который мы ищем.

Это может быть первый номер. В моем случае это 3754, и он показан в порядке убывания.

Способ-2: Использование команды pgrep

pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout.

Это также похоже на вышеприведенный вывод, но этот приводит к сокращению результатов в порядке возрастания, что ясно говорит о том, что родительский PID является последним.

В моем случае это 3754.

Примечание. Если у вас есть несколько идентификаторов процесса, вы можете столкнуться с проблемой идентификации идентификатора родительского процесса при использовании команды pidof & pgrep.

Метод-3: Использование команды pstree

pstree показывает запущенные процессы как дерево.

Дерево коренится либо в pid, либо в init, если pid опущен.

Если имя пользователя указано в команде pstree, тогда отображается весь процесс, принадлежащий соответствующему пользователю.

pstree визуально объединяет идентичные ветви, помещая их в квадратные скобки и префикс с количеством повторений.

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

Команда pstree очень простая, потому что она отдельно разделяет родительский и дочерний процессы

Метод-4: Использование команды ps

ps отображает информацию о выборе активных процессов.

Он отображает идентификатор процесса (pid = PID), терминал, связанный с процессом (tname = TTY), кумулятивное время процессора в формате [DD-] hh: mm: ss (time = TIME) и исполняемое имя (ucmd = ЦМД).

По умолчанию выходной файл не сортируется.

Из вышеприведенного вывода мы можем легко идентифицировать идентификатор родительского процесса (PPID) на основе даты начала процесса.

В моем случае процесс apache2 был запущен @ Dec11, который является родителем, а другие – дочерними. PID apache2 равен 3754.

Метод-5: Использование команды ss

ss используется для вывода статистики сокетов.

Он позволяет отображать информацию, аналогичную netstat.

Он может отображать больше информации о TCP и состоянии, нежели другие инструменты.

Он может отображать статистику для всех типов сокетов, таких как PACKET, TCP, UDP, DCCP, RAW, домен Unix и т. д.

Метод-6: Использование команды netstat

netstat – вывод сетевых подключений, таблиц маршрутизации, статистики интерфейсов, соединений маскарадинга и многоадресной рассылки.

По умолчанию netstat отображает список открытых сокетов.

Если вы не укажете каких-либо семейств адресов, будут выведены активные сокеты всех сконфигурированных семейств адресов.

Эта программа устарела. Замена для netstat – ss.

Метод-7: использование команды lsof

lsof – список открытых файлов.

Команда lsof Linux выводит информацию о файлах, открытых для процессов, запущенных в системе.

Метод-8: Использование команды fuser

Утилита fuser должна записывать на стандартный вывод идентификаторы процессов процессов, запущенных в локальной системе, которые открывают один или несколько именованных файлов.

Метод-9: Использование команды systemctl

systemctl – Управление системой systemd и менеджером сервисов.

Это замена старого системного управления SysV и большинство современных операционных систем Linux были адаптированы systemd.

Источник

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