Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

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

Понятие процесса
Компоненты процесса
Состояние процесса, "заблудшие" процессы
Сигналы, посылка сигналов, команда kill
Приоритет выполнения процесса, команда nice
Текущий контроль процессов, команды ps и top
Защита фоновых процессов, команда nohup

Понятие процесса

Процесс - фундаментальное понятие системы семейства UNIX. С помощью процессов происходит управление ресурсами компьютера, которые используются для выполнения программы. Вам может показаться, что в UNIX все выполняется одновременно, однако на самом деле в единицу времени выполняется только один процесс. Иллюзию параллельного выполнения создает метод "квантования времени", с помощью которого система через определенные промежутки времени (10-20 милисекунд) меняет текущий выполняемый процесс.

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

Компоненты процесса

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

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

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

Каждому новому процессу присваивается уникальный номер PID. Фактическое значение PID большой роли не играет, оно назначается ядром просто по порядку, начиная с 0 и до 65535. Когда номера заканчиваются, ядро вновь начинает с 0, пропуская еще существующие в системе PID.

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

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

Помимо собственного идентификатора PID каждый процесс имеет атрибут своего родительского процесса - PPID.

Идентификатор пользователя и группы

Каждый процесс имеет UID - идентификационный номер пользователя, создавшего данный процесс. Вносить изменения в процесс может только его создатель и привилегированный пользователь (root). У процесса также есть EUID - это так называемый "эффективный" UID.

Он используется для того, чтобы определить, к каким ресурсам у процесса есть права доступа. Как правило, EUID и UID совпадают. Различаются они для программ, у которых установлен бит смены идентификатора пользователя (так называемые suid - программы).

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

Состояние процесса, "заблудшие" процессы

Сам факт существования процесса не дает ему права на получение времени центрального процессора. Процесс может находиться в различных состояниях: Ожидающий - процесс ждет выделения какого-либо ресурса

Свопированный - процесс находится в swap-разделе на диске

Остановленный - процесс приостановлен

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

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

Свопированный процесс не существует в оперативной памяти. Он записан в swap-раздел на диске и ждет "своего часа".

Время от времени в системе появляются процессы, которые так или иначе требуют вмешательства администратора. Такие процессы получили название "заблудшие".

Основные разновидности таких процессов - зависшие и неуправляемые процессы.

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

Ну а неуправляемый системный процесс может (внезапно впав в буйство) просто "крушить" все на своем пути.

Сигналы, посылка сигналов, команда kill

Для управления процессами в системе предусмотрена команда kill.

Формат этой команды kill <-сигнал> pid, где <-сигнал> - номер или символьное имя посылаемого процессу сигнала. Команду kill чаще всего используют для прекращения выполнения процесса. Наиболее часто используемые сигналы:

9 (KILL) - гарантированное уничтожение процесса

15 (TERM) - программное завершение процесса

1 (HUP) - сигнал отбоя. Многие системные процессы при получении этого сигнала перечитывают свои конфигурационные файлы. Вообще рекомендуется давать сигнал HUP перед посылкой сигнала KILL.

Иногда, правда редко, процессы впадают в такие состояния, что их нельзя "убить" даже выдав команду kill -9 pid.

В этом случае самый эффективный способ "убить" процесс - команда reboot.

Приоритет выполнения процесса, команда nice

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

Для этой цели используется команда nice. Формат этой команды:

nice <относительный приоритет от процесса-родителя> <команда>. Относительный приоритет в системе FreeBSD находится в пределах от -20 до +20.

Важно запомнить: Чем ниже значение nice - тем выше приоритет процесса.

Пример:

# nice -10 /usr/local/mygame

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

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

В системе FreeBSD существует команда renice, с помощью которой можно изменить приоритет уже запущенному процессу. Ее формат:

renice <приоритет> [-p pid] [-g <группа>] [-u <пользователь>]

Пример:

# renice +1 -p 989 -u daemon root -p 32

В примере понижается на 1 приоритет процессов с номерами PID 989 и 32, а так же у всег процессов, владельцами которых являются daemon и root.

Текущий контроль процессов, команды ps и top

Для текущего контроля состояния процессов в системе используется команда ps.

Если она введена без опций, то покажет только собственные процессы пользователя и процессы обмена с терминалом. Команда имеет опции:

-a - выдает информацию о всех пользовательских процессах

-е - показывает значения переменных окружения

-h - при выводе на PAGER (more или less) выводит заголовок листинга

-m - сортирует вывод по используемой памяти

-r - сортирует вывод по использованию времени центрального процессора

-x - вывод команды не ассоциирован с терминалами (т.е. показываются также например и процессы-демоны)

Наберите команду

# ps -ax

Посмотрим на листинг (здесь показана для краткости только одна строчка помимо заголовка и только часть полей):

USER PID STAT START TIME COMMAND
bob 1167 R+ 5:57PM 0:00.04 ps -ax
USER - имя владельца процесса
PID - идентификатор процесса
STAT - текущий статус процесса
R = выполнимый, T = остановленный
I = ожидающий, S = ожидающий (> 20 сек)
Z = зомби
Дополнительные флаги:
W = процесс свопирован
+ = процесс в приоритетном режиме своего терминала
START - время запуска процесса
TIME - время центрального процессора, потребленное процессом
COMMAND - имя и аргументы команды

Для самостоятельного изучения вам дается команда top.

Вывод этой команды аналогичен выводу команды ps.

Замечу только использование команды top - довольно дорогое удовольствие, т.к. она сама "пожирает" довольно много ресурсов системы. Не стоит ею злоупотреблять.

Защита фоновых процессов, команда nohup

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

# cat /var/log/messages | grep fetchmail > fetchmail.log &

Но если, к примеру, вы используете в качестве shell интерпретатор sh, и сразу же после этой команды выйдете из системы командой exit (или Ctrl+D), интерпретатор пошлет сигнал отбой (HUP) этому процессу (как впрочем, и всем, им порожденным).

Для то, чтобы этого не произошло, нужно запустить эту команду с помощью команды nohup.

# nohup cat /var/log/messages | grep fetchmail > fetchmail.log &

В этом случае, сигнал отбоя от sh будет проигнорирован.

Правда у команды nohup есть побочные эффекты: она увеличивает значение nice на +5
если стандартный файл вывода не переназначен, то весь вывод пойдет в файл nohup.out (в нашем случае этого не произойдет)Замечание: Если вы пользуетесь csh или другими современными интерпретаторами, то вы вполне можете обходиться без команды nohup.

Вопрос: Как прервать процесс по имени?

Ответ: Используйте команду killall.

Сopyright © 2000. Андрей Фёдоров
http://www.anriintern.com/computer/freebsd/

Назад | Содержание | Вперед

 

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...