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



это целое число однозначно идентифицирующее процесс. Процесс с идентификатором 1 это процесс init.

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

указывает на родительский процесс.

Идентификатор группы процессов (process group ID).

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

Идентификатор сеанса (session ID).

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

Программное окружение (programm environment)

это просто набор строк, заканчивающихся нулевым символом. Строки называются переменными окружения и имеют следующий формат:

имя переменной = значение переменной

Дескрипторы открытых файлов.

Дескриптор файла — некоторое число, которое используется для обращения к файлу. При запуске процесс наследует дескрипторы от родительского процесса.

Текущий рабочий каталог

это каталог от которого система производит разрешение относительных имен.

Текущий корневой каталог

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

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

С каждым процессом связаны действительные идентификаторы пользователя (real user ID) и группы (real group ID), совпадающие с соответствующими идентификаторами пользователя, запустившего процесс. Кроме того, с процессом связаны эффективные идентификаторы пользователя (effective user ID) и группы, определяющие права про­цесса в системе. Обычно, действительные и эффективные идентификаторы совпадают.

Приоритет (nice).

Значение nice ("дружелюбность") показывает готовность процесса уступить свое про­цессорное время другим процессам. Чем больше значение nice, тем ниже приоритет процесса.

Основные сведения о работе с процессами

Основным средством для создания процессов является системный вызов fork. При выполнении данного вызова ядро создает новый процесс, который является копией процесса вызвавшего fork. Созданный процесс называется дочерним, а процесс осуществивший вызов fork — родитель­ским. В дочернем процессе вызов возвращает значение ноль, а в родительском он возвращает идентификатор дочернего процесса. Дочерний процесс наследует дескрипторы открытых файлов и значения переменных окружения родительского процесса.

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

Для завершения процесса используется системный вызов exit. Вызов имеет целочисленный аргумент называемый кодом завершения процесса. Как правило при успешном завершении процесса код завершения равен нулю, а в случае возникновения ошибки отличен от нуля. Роди­тельский процесс может получить статус завершения дочернего процесса выполнив системный вызов wait или waitpid.

Механизмы межпроцессного взаимодействия

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

Сигналы

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

SIGCHLD

сигнал о завершении дочернего процесса.

SIGHUP

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

SIGINT

сигнал посылается всем процессам сеанса, связанного с терминалом, при нажатии поль­зователем клавиши прерывания (CTRL-C).

SIGTERM

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

SIGKILL

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

SIGSEGV

сигнал посылается процессу, если тот пытается обратиться к неверному адресу памяти.

 

SIGSTOP

сигнал приводящий к остановке процесса. Для отправки сигнала SIGSTOP активному процессу текущего терминала можно воспользоваться комбинацией клавиш (CTRL-Z).

SIGCONT

сигнал возобновляющий работу остановленного процесса.

SIGUSR1,SIGUSR2

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

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

Каналы

Часто возникает ситуация когда два процесса последовательно обрабатывают одни и те же дан­ные. Для обеспечения передачи данных от одного процесса к другому в подобных ситуациях используются программные каналы. Программный канал (pipe) служит для установления связи, соединяющей один процесс с другим. Запись данных в канал и чтение из него осуществляются при помощи системных вызовов write и read, т.е. работа с каналами аналогична работе с файла­ми. Для создания программного канала используется системный вызов pipe. Вызов возвращает два дескриптора файлов, первый из которых открыт для чтения из канала, а второй для записи в канал.

Каналы используются, например, при организации конвейера. При выполнении команды:

find /usr/bin -name a* | sort

создается канал, команда find выводит в него результаты своей работы, а команда sort считывает из этого канала данные для сортировки.

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

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

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


Дата добавления: 2018-04-05; просмотров: 379; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!