Мобильное программирование приложений реального времени в стандарте POSIX

Одношаговое порождение процессов


При стандартизации средств одношагового порождения процессов преследовались две основные цели:

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

Чтобы достичь перечисленных целей, функции posix_spawn() и posix_spawnp() контролируют шесть видов наследуемых сущностей:

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

Как правило, все открытые дескрипторы родительского процесса остаются таковыми и в порожденном, за исключением тех, у которых установлен флаг FD_CLOEXEC. Кроме того, принимается во внимание объект типа posix_spawn_file_actions_t, который содержит действия по закрытию, открытию и/или дублированию файловых дескрипторов. Для формирования объектов типа posix_spawn_file_actions_t служат функции posix_spawn_file_actions_addclose(), posix_spawn_file_actions_addopen() и posix_spawn_file_actions_adddup2().

За контроль других сущностей, наследуемых при одношаговом порождении процессов, отвечают атрибутные объекты, для формирования и опроса которых служат функции posix_spawnattr_init(), posix_spawnattr_destroy(), posix_spawnattr_getflags(), posix_spawnattr_setflags(), posix_spawnattr_getpgroup(), posix_spawnattr_setpgroup(), posix_spawnattr_getschedparam(), posix_spawnattr_setschedparam(), posix_spawnattr_getschedpolicy(), posix_spawnattr_setschedpolicy(), posix_spawnattr_getsigdefault(), posix_spawnattr_setsigdefault(), posix_spawnattr_getsigmask(), posix_spawnattr_setsigmask().

Реализация одношагового порождения процессов может быть непосредственной, выполненной на уровне ядра операционной системы, и библиотечной, основанной на функциях fork()/exec(). Естественно, надеяться на повышение эффективности по сравнению с двухшаговым порождением имеет смысл только в первом случае.



Содержание раздела