Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание Процесса




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

Pid_t – тип данных для ID процесса. Получить ID процесса можно, вызвав функцию getpid. Функция getppid возвращает ID родителя текущего процесса. Программа должна включить заглавные файлы "unistd.h" и "sys/types.h" чтобы использовать эти функции.

pid_t

Pid_t – это целое число со знаком. В библиотеке GNU этот тип идентичен типу int.

pid_t getpid (void)

Возвращает ID текущего процесса.

pid_t getppid (void)

Возвращает ID родителя текущего процесса.

Функция fork() - примитив для создания процесса. Она объявлена в заглавном файле "unistd.h ".

pid_t fork (void)

Функция fork создает новый процесс.

Если функция выполнилась успешно, то она возвращает значение 0 в дочернем процессе и ID дочернего процесса в родительском процессе.

Если создание процесса потерпело неудачу, fork возвращает значение -1 в родительском процессе. Следующие значения ошибок errno определены для fork:

EAGAIN

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

ENOMEM

процесс требует большего количества ресурсов, чем система может обеспечить

Специфические атрибуты дочернего процесса, которые отличаются от родительского процесса:

· дочерний процесс имеет собственный уникальный ID

· ID родителя дочернего процесса - ID родительского процесса

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

· прошедшее процессорное время для дочернего процесса установлено на нуль

· дочерний не наследует набор блокировок файла родительского процесса

· дочерний не наследует набор таймеров родительского процесса

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

pid_t vfork (void)

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

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

Дочерний процесс, созданный vfork, использует адресное пространство родителя, пока не вызывает одну из функций exec. Тем временем, родительский процесс приостанавливает свое выполнение.

Дочерний процесс, созданный vfork, не должен изменять любые глобальные данные или даже локальные переменные, доступные родительскому процессу. Кроме того, дочерний процесс не может возвращаться из функции, которая вызвала vfork! Это спутало бы информацию управления родительского процесса. Если Вы сомневаетесь, используйте fork.

Некоторые операционные системы не выполняют vfork. Библиотека GNU C разрешает использовать vfork на всех системах, но фактически выполняет fork, если vfork не доступна.




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


Дата добавления: 2015-05-10; Просмотров: 274; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.