• Narrow screen resolution
  • Wide screen resolution
  • Wide screen resolution
OOPS. Your Flash player is missing or outdated.Click here to update your player so you can see this content.
Главная Linux Взаимодействие процессов в linux
Взаимодействие процессов в linux Печать E-mail
Рейтинг пользователей: / 1
ХудшийЛучший 
Автор: Administrator   

2.5.3. Взаимодействие процессов


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


  • Идентификатор процесса (PID). Каждый процесс в системе имеет уникальный
    идентификатор. Каждый новый запущенный процесс получает номер на единицу больше
    предыдущего.
  • Идентификатор родительского процесса (PPID). Данный атрибут процесс получает во
    время своего запуска и используется для получения статуса родительского процесса. В
    листинге 2.10 видно, что процесс portmap имеет идентификатор родительского процесса
    равный 1, т.е. данный процесс был запущен процессом init - главным процессом ОС Linux,
    который запускает все основные системные процессы.
  • Реальный и эффективный идентификаторы пользователя (UID,EUID) и группы (GID,
    EGID), от которого был запущен процесс. Данные атрибуты процесса говорят о его
    принадлежности к конкретному пользователю и группе. Реальные идентификаторы
    совпадают с идентификаторами пользователя, который запустил процесс, и группы, к
    которой он принадлежит. Права доступа процесса к ресурсам ОС Linux определяются не
    реальными, а эффективными идентификаторами. Если на исполняемом файле программы
    установлен специальный бит SGID или SUID, то процесс данной программы будет обладать
    правами доступа владельца исполняемого файла. Для просмотра данных атрибутов можно
    воспользоваться командой ps, задав желаемый формат отображения колонок так, как это
    сделано в листинге


[root@rhel5 ~]# ps -ео pid,ppid,uid,euid,gid,egid,comm


PID

PPID UID EUID GID EGID COMMAND

1

0

0

0

0

0

init

2

1

0

0

0

0

migration/0

3

1

0

0

0

0

ksofti rqd/0

2508

1

0

0

51

51

sendmai1

2516

1

51

51

51

51

sendmai Л

2528

1

0

0

0

0

gpm

2539

1

0

0

0

0

crond

2576

1

43

43

43

43

xfs

2587

1

0

0

0

0

anacron

3071

3069

0

0

22

22

gnome-pty-helpe

3072

3069

0

0

0

0

bash

3180

2476

0

0

0

0

sshd

3192

3180

0

0

0

0

bash

3255

3192

0

0

0

0

ps

 

  • Приоритет (priority) и относительный (nice) приоритет процесса. Данный атрибут определяет количество процессорного времени, которое может использовать процесс в работе и зависит от таких параметров, как относительный приоритет процесса, текущее состояние, время ожидание запуска. Пользователь имеет возможность изменять только относительный приоритет процесса. В зависимости от поставленной задачи можно повышать или уменьшать приоритет одного процесса по отношению к другим процессам. В ОС Linux существуют две команды управления приоритетом процессов: nice и renice. Относительный приоритет процесса это переменный параметр, значение которого изменяется в диапазоне от -20 до +19. Чем больше значение данного параметра, тем меньше относительный приоритет процесса. С наименьшими относительными приоритетами работают в основном только системные процессы. Относительный приоритет дочернего процесса наследуется от родительского процесса, поэтому все процессы, запущенные командой init работают с тем же приоритетом.
  • Состояние процесса. В ОС Linux каждый процесс обязательно находится в одном из перечисленных ниже состояний и может быть переведен из одного состояния в другое системой или командами пользователя. Различают следующее состояния процессов:
    • Работоспособный процесс (runnable). Если какой-то процесс в текущий момент времени выполняет какие-либо действия или находится в очереди у центрального процессора на исполнение, он называется работоспособным и обозначается символом R.
    • Ожидающий процесс (sleeping). Данное состояние означает, что процесс инициализировал выполнение какой-либо системной операции и ожидает ее завершения. К таким операциям относятся ввод/вывод, завершение дочернего процесса и т.д. Процессы с таким состоянием обозначаются символом S.
    • Остановленный процесс (stopping). Любой процесс можно остановить. Это может делать как система, так и пользователь. Состояние такого процесса обозначается символом Т.
    • Завершившийся процесс (zombie). Процессы данного состояния возникают в случае, когда родительский процесс не ожидая завершения дочернего процесса, продолжает параллельно работать. Процессы с таким состоянием обозначаются символом Z. Завершившиеся процессы больше не выполняются системой, но по-прежнему продолжают потреблять ее не вычислительные ресурсы.
    • Непрерываемый процесс (uninterruptible). Процессы в данном состоянии ожидают завершения операции ввода - вывода с прямым доступом в память. Такой процесс нельзя завершить, пока не завершится операция ввода/вывода. Процессы с таким состоянием обозначаются символом D.

Команда nice используется для запуска еще не запущенных процессов с заданным приоритетом и имеет следующий синтаксис:
nice [-п] [команда [аргументы]...]


Здесь после необязательной опции -n необходимо указать значение относительного приоритета, а в качестве параметров «команда» и «аргументы» указать соответствующую команду и ее аргументы.
Например, для запуска нового процесса редактора vi со значением -8 необходимо выполнить команду nice -n -8 vi . После ввода данной команды откроется окно редактора vi. Убедиться,в изменении относительного приоритета процесса можно воспользовавшись командой ps.
Команда renice используется для изменения приоритета уже запущенных процессов и имеет следующий синтаксис:
renice приоритет [ [ -р ] идентификаторы процессов ] [ [ -д ] группы
] [ [ -и ] пользователи ]


В качестве обязательных аргументов команде renice необходимо указать два аргумента: относительный приоритет процесса и один из трех дополнительных аргументов. Дополнительными аргументами команды renice являются идентификаторы процессов, группы, которым принадлежат процессы и пользователи, запустившие данные процессы.
Например, для  изменения текущего относительного приоритета процесса Xorg необходимо выполнить команду renice следующим образом:
[root@rhe15 ~]# renice -5 -р $(рдгер хогд)
2852: old priority 0, new priority -5
[root@rhel5 ~]# ps -eo nice,comm|grep xorg -5 Xorg


Изменение относительного приоритета процесса.


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

 

Добавить комментарий


Защитный код
Обновить


Авторизация


Новости с OpenNet

Проект OpenNET

Карта сайтаПартнеры