Родительский процесс linux это

Содержание
  1. Все, что вам нужно знать о процессах в Linux
  2. Типы процессов
  3. Что такое демоны
  4. Создание процессов в Linux
  5. Как Linux идентифицирует процессы?
  6. Процесс Init
  7. Запуск процессов в Linux
  8. Фоновые процессы в Linux
  9. Состояние процесса в Linux
  10. Как просмотреть активные процессы в Linux
  11. 1. Команда ps
  12. 2. top – утилита системного мониторинга
  13. 3. glances – утилита системного мониторинга
  14. Управление процессами в Linux
  15. Отправка сигналов процессу
  16. Изменение приоритета процесса
  17. Администрирование систем Linux. Вводная информация об управлении процессами
  18. Часть I. Управление процессами
  19. Глава 1. Вводная информация об управлении процессами
  20. 1.1. Терминология
  21. 1.2. Базовые приемы управления процессами
  22. 1.3. Отправка сигналов процессам
  23. 1.4. Практическое задание: вводная информация об управлении процессами
  24. 1.5. Корректная процедура выполнения практического задания: вводная информация об управлении процессами

Все, что вам нужно знать о процессах в Linux

Оригинал: All You Need To Know About Processes in Linux [Comprehensive Guide]
Автор: Aaron Kili
Дата публикации: 31 марта 2017 года
Перевод: А. Кривошей
Дата перевода: август 2017 г.

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

Типы процессов

В Linux есть два основных типа процессов:

Процессы переднего плана (также известны как интерактивные процессы) — они инициализируются и контролируются в терминальной сессии. Другими словами, для запуска таких процессов в системе должен находиться пользователь, они не запускаются автоматически как часть системных служб.
Фоновые процессы (также известны как неинтерактивные/автоматические процессы) — не подключены к терминалу. Они не ждут ввода от пользователя.

Что такое демоны

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

Создание процессов в Linux

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

Есть два распространенных способа создания нового процесса в Linux:

1. С помощью функции System(). Этот способ сравнительно прост, однако неэффективен и создает определенные риски с точки зрения безопасности.
2. С помощью функций fork() и exec() — более продвинутая техника с точки зрения гибкости, скорости и безопасности.

Как Linux идентифицирует процессы?

Поскольку Linux — многопользовательская система, и различные пользователи могут одновременно запускать разные программы, каждый запущенный экземпляр программы должен получать уникальный идентификатор от ядра системы.
Программы идентифицируются по ID процесса (PID), а также по ID родительского процесса (PPID), поэтому процессы можно разделить на следующие категории:

Родительские процессы — это процессы, которые в процессе работы создают другие процессы.
Дочерние процессы — это процессы, созданные другими процессами.

Процесс Init

Процесс Init — это родительский процесс для всех процессов в системе, это первая программа, которая исполняется при загрузке системы Linux; он управляет всеми другими процессами в системе. Init запускается непосредственно ядром системы, поэтому он в принципе не имеет родительского процесса.

Процесс Init всегда получает ID 1. Он функционирует как приемный родитель для всех осиротевших процессов.

Для определения ID процесса можно использовать команду pidof:

Найти ID процесса и ID родительского процесса для системной оболочки можно с помощью команд:

Запуск процессов в Linux

При старте команды или программы (например cloudcmd – CloudCommander), она запускает процесс в системе. Вы можете запустить процесс переднего плана (интерактивный), как показано ниже, он подключится к терминалу и пользователь сможет взаимодействовать с ним:

Фоновые процессы в Linux

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

Вы также можете отправить процесс на задний план, приостановив его с помощью [Ctrl + Z], это отправит сигнал SIGSTOP процессу, тем самым прекратив его работу; он простаивает:

Для продолжения выполнения приостановленного в фоне процесса, используется команда bg:

Для перевода процесса из фонового режима на передний план используется команда fg вместе с ID:

Состояние процесса в Linux

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

Running (работа) — процесс работает (он является текущим процессом в системе) или готов к работе (ждет выделения ресурсов процессора).
Waiting (ожидание) — в этом состоянии процесс ждет события, которое должно запустить его, или выделения системных ресурсов.
Кроме того, ядро системы делит процессы в состоянии ожидания на два типа: перываемые процессы, состояние ожидания которых может быть прервано сигналом, и непрерываемые, состояние ожидания которых может быть прервано только аппаратным способом.
Stopped (остановка) — в этом состоянии процесс останавливает работу, обычно после получения соответствующего сигнала. Например, процесс может быть остановлен для отладки.
Zombie (зомби) — процесс мертв, то есть он был остановлен, но в системе осталась выполняемая им задача.

Читайте также:  Как ntfs oracle linux

Как просмотреть активные процессы в Linux

В Linux есть несколько утилит для просмотра запущенных в системе процессов, наиболее широко известны команды ps и top:

1. Команда ps

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

2. top – утилита системного мониторинга

top — это мощная утилита, которая позволяет в режиме реального времени просматривать список запущенных процессов, как показано ниже:

3. glances – утилита системного мониторинга

glances — это сравнительно новая утилита для мониторинга активности системы с продвинутыми возможностями:

Есть также еще несколько полезных программ, которые вы можете использовать для просмотра списка активных процессов, почитать о них можно по ссылкам ниже.

Управление процессами в Linux

В Linux также имеются команды для управления процессами, например kill, pkill, pgrep и killall. Ниже приведено несколько примеров их использования:

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

Обратите внимание, что с их помощью вы можете завршать зависшие приложения, которые тормозят вашу систему.

Отправка сигналов процессу

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

Для отправки сигналов процессу используются описанные выше команды kill, pkill или pgrep. Однако программа ответит на сигнал, только если она запрограммирована распознавать такой сигнал.

Большинство сигналов предназначены для использования системой или программистами при написании кода. Следующие сигналы могут быть полезны пользователю:

SIGHUP 1 – отправляется процессу при закрытии контролирующего его терминала.
SIGINT 2 – отправляется процессу контролирующим его терминалом, если пользователь прерывает работу процесса клавишами [Ctrl+C].
SIGQUIT 3 – отправляется процессу, если пользователь посылает сигнал выхода из программы [Ctrl+D].
SIGKILL 9 – этот сигнал немедленно завершает (убивает) процесс без выполнения любых операций очистки файлов, логов и т.д.
SIGTERM 15 – это сигнал завершения работы программы (он по умоланию отправляется командой kill).
SIGTSTP 20 – отправляется процессу контролирующим его терминалом с запросом на остановку (terminal stop); инициируется при нажатии [Ctrl+Z].

Ниже приведены примеры использования команд kill для завершения работы Firefox при его зависании с использованием PID:

Для завершения программы с использованием ее названия используются команды pkill или killall:

Изменение приоритета процесса

В Linux все активные процессы имеют определенное значение приоритета (nice). Процессы с более высоким приоритетом обычно получают больше процессорного времени, чем процессы с более низким приоритетом.

Однако пользователь с привилегиями root может менять приоритет с помощью команд nice и renice.
В выводе команды top столбец NI отображает значения nice для процессов.

Вы можете использовать команду nice, чтобы задать значение nice процесса. Не забывайте, что обычный пользователь может присвоить процессу значение nice от 0 до 20, только если это процесс ему принадлежит.
Отрицательные значения nice может использовать только пользователь root.

Для понижения приоритета процесса используется команда renice:

Другие статьи об управлении процессами в Linux вы найдете на странице «Процессы в Linux-системе».

Источник

Администрирование систем 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. Уничтожение процесса

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

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

Читайте также:  Usb stick formatter linux

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

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 (процесса которой более не существует).

Одним из наиболее часто используемых инструментов для ознакомления со списком процессов в 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 ).

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

Читайте также:  Linux download from console

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 всем процессам с определенным именем.

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 .

Источник

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